Compare commits
55 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d743073309 | ||
|
|
a636911612 | ||
|
|
7a62f91752 | ||
|
|
b551a54c8f | ||
|
|
26d86aa2fe | ||
|
|
6ee9246650 | ||
|
|
1cd96fbdbf | ||
|
|
a030a026b1 | ||
|
|
8bf9cd0bee | ||
|
|
13b1aad4b8 | ||
|
|
916d956ce2 | ||
|
|
87a7650d26 | ||
|
|
3484e187da | ||
|
|
0835f330e2 | ||
|
|
8064472477 | ||
|
|
2281012e33 | ||
|
|
83eaeab1ba | ||
|
|
6405764df3 | ||
|
|
253276a27b | ||
|
|
855a71ac56 | ||
|
|
96dc53977f | ||
|
|
31111e68eb | ||
|
|
ac0de29872 | ||
|
|
9e2b722491 | ||
|
|
59627e6fe2 | ||
|
|
cd0b5fb378 | ||
|
|
48a3c64c7c | ||
|
|
62da804518 | ||
|
|
439b99cc4a | ||
|
|
64f0efc2c0 | ||
|
|
f196bf5b76 | ||
|
|
790968be6a | ||
|
|
83f0f9537f | ||
|
|
68ebfec918 | ||
|
|
8be4dea081 | ||
|
|
cfdbba45c3 | ||
|
|
d408c9f4bf | ||
|
|
8f4c58c4c3 | ||
|
|
7e88e9648f | ||
|
|
4516d136a4 | ||
|
|
1b85dfbed1 | ||
|
|
807ffb419a | ||
|
|
e826f43aed | ||
|
|
d619f5fafc | ||
|
|
b3e2f9b7ff | ||
|
|
99a39c6f52 | ||
|
|
22991e8740 | ||
|
|
7646ecb6f7 | ||
|
|
204db674bb | ||
|
|
99fe6623de | ||
|
|
f1f78d2485 | ||
|
|
b2ae20b796 | ||
|
|
83bd4e9642 | ||
|
|
767349798a | ||
|
|
ae38f4709b |
15
.github/workflows/build-manager-manual.yml
vendored
@@ -149,18 +149,6 @@ jobs:
|
|||||||
} >> gradle.properties
|
} >> gradle.properties
|
||||||
echo "${{ secrets.KEYSTORE }}" | base64 -d > key.jks
|
echo "${{ secrets.KEYSTORE }}" | base64 -d > key.jks
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Setup Java
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
distribution: temurin
|
|
||||||
java-version: 21
|
|
||||||
|
|
||||||
- name: Setup Gradle
|
|
||||||
uses: gradle/actions/setup-gradle@v4
|
|
||||||
|
|
||||||
- name: Setup Android SDK
|
|
||||||
uses: android-actions/setup-android@v3
|
|
||||||
|
|
||||||
- name: Download arm64 susfs
|
- name: Download arm64 susfs
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
@@ -213,6 +201,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
run: |
|
run: |
|
||||||
|
export ANDROID_HOME=/root/.android/sdk
|
||||||
|
export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$PATH
|
||||||
{
|
{
|
||||||
echo 'org.gradle.parallel=true'
|
echo 'org.gradle.parallel=true'
|
||||||
echo 'org.gradle.vfs.watch=true'
|
echo 'org.gradle.vfs.watch=true'
|
||||||
@@ -221,6 +211,7 @@ jobs:
|
|||||||
} >> gradle.properties
|
} >> gradle.properties
|
||||||
sed -i 's/org.gradle.configuration-cache=true//g' gradle.properties
|
sed -i 's/org.gradle.configuration-cache=true//g' gradle.properties
|
||||||
./gradlew clean assembleRelease
|
./gradlew clean assembleRelease
|
||||||
|
|
||||||
- name: Upload build artifact
|
- name: Upload build artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
if: ${{ ( github.event_name != 'pull_request' && github.ref == 'refs/heads/main' ) || github.ref_type == 'tag' }}
|
if: ${{ ( github.event_name != 'pull_request' && github.ref == 'refs/heads/main' ) || github.ref_type == 'tag' }}
|
||||||
|
|||||||
2
.github/workflows/crowdin.yml
vendored
@@ -3,6 +3,8 @@ name: Crowdin Action
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ main ]
|
branches: [ main ]
|
||||||
|
paths:
|
||||||
|
- 'manager/app/src/main/res/**'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
synchronize-with-crowdin:
|
synchronize-with-crowdin:
|
||||||
|
|||||||
2
.github/workflows/gki-kernel-local.yml
vendored
@@ -162,6 +162,8 @@ jobs:
|
|||||||
if: ${{ inputs.build_lkm == true }}
|
if: ${{ inputs.build_lkm == true }}
|
||||||
working-directory: android-kernel
|
working-directory: android-kernel
|
||||||
run: |
|
run: |
|
||||||
|
pip install ast-grep-cli
|
||||||
|
sudo apt-get install llvm-15 -y
|
||||||
ast-grep -U -p '$$$ check_exports($$$) {$$$}' -r '' common/scripts/mod/modpost.c
|
ast-grep -U -p '$$$ check_exports($$$) {$$$}' -r '' common/scripts/mod/modpost.c
|
||||||
ast-grep -U -p 'check_exports($$$);' -r '' common/scripts/mod/modpost.c
|
ast-grep -U -p 'check_exports($$$);' -r '' common/scripts/mod/modpost.c
|
||||||
sed -i '/config KSU/,/help/{s/default y/default m/}' common/drivers/kernelsu/Kconfig
|
sed -i '/config KSU/,/help/{s/default y/default m/}' common/drivers/kernelsu/Kconfig
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ Android device root solution based on [KernelSU](https://github.com/tiann/Kernel
|
|||||||
|
|
||||||
## How to add
|
## How to add
|
||||||
|
|
||||||
Using main branching (non-GKI device builds are not supported)
|
Using main branching (non-GKI device builds are not supported) (requires manual integration of susfs)
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
||||||
```
|
```
|
||||||
|
|
||||||
Using branches that support non-GKI devices
|
Using branches that support non-GKI devices (requires manual integration of susfs)
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
||||||
```
|
```
|
||||||
@@ -60,6 +60,8 @@ KPM templates: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
|
|
||||||
## More links
|
## More links
|
||||||
|
|
||||||
|
**If you need to submit a translation for the manager go to** https://crowdin.com/project/SukiSU-Ultra
|
||||||
|
|
||||||
Projects compiled based on Sukisu and susfs
|
Projects compiled based on Sukisu and susfs
|
||||||
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
||||||
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
||||||
@@ -111,7 +113,10 @@ Please **all** refer to https://kernelsu.org/zh_CN/guide/installation.html
|
|||||||
## License
|
## License
|
||||||
|
|
||||||
- The file in the “kernel” directory is under [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) license.
|
- The file in the “kernel” directory is under [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) license.
|
||||||
- All other parts except the “kernel” directory are under [GPL-3.0 or later](https://www.gnu.org/licenses/gpl-3.0.html) license.
|
|
||||||
|
- The images of the files `ic_launcher*` with anime character emoticons are copyrighted by [五十根大虾仁](https://space.bilibili.com/370927), the Brand Intellectual Property in the images is owned by [明风OuO](https://space.bilibili.com/274939213), and the vectorization is done by @MiRinChan. Before using these files, in addition to complying with [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.txt), you also need to comply with the authorization of the two authors to use these artistic contents.
|
||||||
|
|
||||||
|
- Except for the files or directories mentioned above, all other parts are under [GPL-3.0 or later](https://www.gnu.org/licenses/gpl-3.0.html) license.
|
||||||
|
|
||||||
## Sponsorship list
|
## Sponsorship list
|
||||||
|
|
||||||
@@ -133,4 +138,4 @@ If the above list does not have your name, I will update it as soon as possible,
|
|||||||
- [Magisk](https://github.com/topjohnwu/Magisk): Powerful root utility
|
- [Magisk](https://github.com/topjohnwu/Magisk): Powerful root utility
|
||||||
- [genuine](https://github.com/brevent/genuine/): APK v2 Signature Verification
|
- [genuine](https://github.com/brevent/genuine/): APK v2 Signature Verification
|
||||||
- [Diamorphine](https://github.com/m0nad/Diamorphine): Some rootkit utilities.
|
- [Diamorphine](https://github.com/m0nad/Diamorphine): Some rootkit utilities.
|
||||||
- [KernelPatch](https://github.com/bmax121/KernelPatch): KernelPatch is a key part of the APatch implementation of the kernel module
|
- [KernelPatch](https://github.com/bmax121/KernelPatch): KernelPatch is a key part of the APatch implementation of the kernel module
|
||||||
|
|||||||
@@ -13,12 +13,12 @@
|
|||||||
|
|
||||||
## 追加方法
|
## 追加方法
|
||||||
|
|
||||||
メイン分岐の使用(GKI デバイス以外のビルドはサポートされていません。)
|
メイン分岐の使用(GKI デバイス以外のビルドはサポートされていません。) (手動によるサスフ統合が必要)
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
||||||
```
|
```
|
||||||
|
|
||||||
GKI以外のデバイスをサポートするブランチを使用する
|
GKI以外のデバイスをサポートするブランチを使用する (手動によるサスフ統合が必要)
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
||||||
```
|
```
|
||||||
@@ -60,7 +60,7 @@ KPM テンプレートのアドレス: https://github.com/udochina/KPM-Build-Any
|
|||||||
|
|
||||||
## その他のリンク
|
## その他のリンク
|
||||||
|
|
||||||
SukiSU と susfs をベースにコンパイルされたプロジェクトです。
|
**監督に翻訳を提出する必要がある場合は、https://crowdin.com/project/SukiSU-Ultra。
|
||||||
|
|
||||||
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
||||||
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
||||||
@@ -110,8 +110,9 @@ https://kernelsu.org/zh_CN/guide/installation.html をご参照ください。
|
|||||||
|
|
||||||
## ライセンス
|
## ライセンス
|
||||||
|
|
||||||
- “kernel” ディレクトリ内のファイルは [GPL-2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.ja.html) のみライセンス下にあります。
|
- `kernel` ディレクトリ以下のファイルは[GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)です。
|
||||||
- “kernel” ディレクトリを除くその他すべての部分は [GPL-3.0 またはそれ以降](https://www.gnu.org/licenses/gpl-3.0.html) のライセンス下にあります。
|
- アニメキャラクターの絵文字を含むファイル `ic_launcher*` の画像は[五十根大虾仁](https://space.bilibili.com/370927)が著作権を所有しており、画像内のブランド知的財産権は[明风OuO](https://space.bilibili.com/274939213)が所有しています。ベクトル化は @MiRinChan が行っています。これらのファイルを使用する前に、[Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.txt)に準拠することに加えて、これらの芸術コンテンツを使用するには、2人の著者の許可にも従う必要があります。
|
||||||
|
- 上記のファイルまたはディレクトリを除き、その他のすべての部分は[GPL-3.0以降](https://www.gnu.org/licenses/gpl-3.0.html)です。
|
||||||
|
|
||||||
## スポンサーシップの一覧
|
## スポンサーシップの一覧
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,13 @@
|
|||||||
Çekirdek kaynak kodunun kök dizininde aşağıdaki komutları çalıştırın:
|
Çekirdek kaynak kodunun kök dizininde aşağıdaki komutları çalıştırın:
|
||||||
|
|
||||||
Ana dalı kullanın (GKI olmayan cihazlar için desteklenmez)
|
Ana dalı kullanın (GKI olmayan cihazlar için desteklenmez)
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
||||||
```
|
```
|
||||||
|
|
||||||
GKI olmayan cihazları destekleyen dalı kullanın
|
GKI olmayan cihazları destekleyen dalı kullanın
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
||||||
```
|
```
|
||||||
@@ -37,15 +39,16 @@ curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kern
|
|||||||
- Bu bölüm [rsuntk\'nin kanca yöntemlerinden](https://github.com/rsuntk/KernelSU) alıntılanmıştır
|
- Bu bölüm [rsuntk\'nin kanca yöntemlerinden](https://github.com/rsuntk/KernelSU) alıntılanmıştır
|
||||||
|
|
||||||
1. **KPROBES Kancası:**
|
1. **KPROBES Kancası:**
|
||||||
- Yüklenebilir çekirdek modülleri (LKM) için kullanılır
|
|
||||||
- GKI 2.0 çekirdeğinin varsayılan kanca yöntemi
|
- Yüklenebilir çekirdek modülleri (LKM) için kullanılır
|
||||||
- `CONFIG_KPROBES=y` gerektirir
|
- GKI 2.0 çekirdeğinin varsayılan kanca yöntemi
|
||||||
|
- `CONFIG_KPROBES=y` gerektirir
|
||||||
|
|
||||||
2. **Manuel Kanca:**
|
2. **Manuel Kanca:**
|
||||||
- Standart KernelSU kancası: https://kernelsu.org/guide/how-to-integrate-for-non-gki.html#manually-modify-the-kernel-source
|
- Standart KernelSU kancası: https://kernelsu.org/guide/how-to-integrate-for-non-gki.html#manually-modify-the-kernel-source
|
||||||
- backslashxx\'nin syscall manuel kancası: https://github.com/backslashxx/KernelSU/issues/5
|
- backslashxx\'nin syscall manuel kancası: https://github.com/backslashxx/KernelSU/issues/5
|
||||||
- GKI olmayan çekirdeğin varsayılan kanca yöntemi
|
- GKI olmayan çekirdeğin varsayılan kanca yöntemi
|
||||||
- `CONFIG_KSU_MANUAL_HOOK=y` gerektirir
|
- `CONFIG_KSU_MANUAL_HOOK=y` gerektirir
|
||||||
|
|
||||||
## KPM Desteği
|
## KPM Desteği
|
||||||
|
|
||||||
@@ -57,6 +60,7 @@ Kaynak kodu: https://github.com/ShirkNeko/SukiSU_KernelPatch_patch
|
|||||||
KPM şablonu: https://github.com/udochina/KPM-Build-Anywhere
|
KPM şablonu: https://github.com/udochina/KPM-Build-Anywhere
|
||||||
|
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
>
|
||||||
> 1. `CONFIG_KPM=y` gerektirir
|
> 1. `CONFIG_KPM=y` gerektirir
|
||||||
> 2. GKI olmayan cihazlar ayrıca `CONFIG_KALLSYMS=y` ve `CONFIG_KALLSYMS_ALL=y` gerektirir
|
> 2. GKI olmayan cihazlar ayrıca `CONFIG_KALLSYMS=y` ve `CONFIG_KALLSYMS_ALL=y` gerektirir
|
||||||
> 3. Bazı çekirdek `4.19` altı kaynak kodları, `4.19`dan geri taşınan başlık dosyası `set_memory.h` gerektirir
|
> 3. Bazı çekirdek `4.19` altı kaynak kodları, `4.19`dan geri taşınan başlık dosyası `set_memory.h` gerektirir
|
||||||
@@ -79,6 +83,7 @@ KPM şablonu: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
## Daha Fazla Bağlantı
|
## Daha Fazla Bağlantı
|
||||||
|
|
||||||
SukiSU ve susfs tabanlı derlenen projeler
|
SukiSU ve susfs tabanlı derlenen projeler
|
||||||
|
|
||||||
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
||||||
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
- [OnePlus](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
||||||
|
|
||||||
@@ -89,6 +94,7 @@ SukiSU ve susfs tabanlı derlenen projeler
|
|||||||
Lütfen **tümünü** https://kernelsu.org/zh_CN/guide/installation.html adresinden inceleyin
|
Lütfen **tümünü** https://kernelsu.org/zh_CN/guide/installation.html adresinden inceleyin
|
||||||
|
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
>
|
||||||
> 1. Xiaomi, Redmi, Samsung gibi GKI 2.0 cihazlar için uygundur (Meizu, OnePlus, Realme ve Oppo gibi değiştirilmiş çekirdekli üreticiler hariç)
|
> 1. Xiaomi, Redmi, Samsung gibi GKI 2.0 cihazlar için uygundur (Meizu, OnePlus, Realme ve Oppo gibi değiştirilmiş çekirdekli üreticiler hariç)
|
||||||
> 2. [Daha fazla bağlantı](#daha-fazla-bağlantı) bölümündeki GKI tabanlı projeleri bulun. Cihaz çekirdek sürümünü bulun. Ardından indirin ve TWRP veya çekirdek yazma aracı kullanarak AnyKernel3 soneki olan sıkıştırılmış paketi yazın
|
> 2. [Daha fazla bağlantı](#daha-fazla-bağlantı) bölümündeki GKI tabanlı projeleri bulun. Cihaz çekirdek sürümünü bulun. Ardından indirin ve TWRP veya çekirdek yazma aracı kullanarak AnyKernel3 soneki olan sıkıştırılmış paketi yazın
|
||||||
> 3. Genellikle sonek olmayan .zip sıkıştırılmış paketler sıkıştırılmamıştır, gz soneki olanlar ise Dimensity modelleri için kullanılan sıkıştırma yöntemidir
|
> 3. Genellikle sonek olmayan .zip sıkıştırılmış paketler sıkıştırılmamıştır, gz soneki olanlar ise Dimensity modelleri için kullanılan sıkıştırma yöntemidir
|
||||||
@@ -98,6 +104,7 @@ Lütfen **tümünü** https://kernelsu.org/zh_CN/guide/installation.html adresin
|
|||||||
1. Daha fazla bağlantı bölümündeki OnePlus projesini bulun ve kendiniz doldurun, ardından bulut derleme yapın ve AnyKernel3 soneki olan sıkıştırılmış paketi yazın
|
1. Daha fazla bağlantı bölümündeki OnePlus projesini bulun ve kendiniz doldurun, ardından bulut derleme yapın ve AnyKernel3 soneki olan sıkıştırılmış paketi yazın
|
||||||
|
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
>
|
||||||
> - Çekirdek sürümü için yalnızca ilk iki haneyi doldurmanız yeterlidir, örneğin 5.10, 5.15, 6.1, 6.6
|
> - Çekirdek sürümü için yalnızca ilk iki haneyi doldurmanız yeterlidir, örneğin 5.10, 5.15, 6.1, 6.6
|
||||||
> - İşlemci kod adını kendiniz arayın, genellikle tamamen İngilizce ve sayı içermeden oluşur
|
> - İşlemci kod adını kendiniz arayın, genellikle tamamen İngilizce ve sayı içermeden oluşur
|
||||||
> - Dal ve yapılandırma dosyasını kendiniz OnePlus çekirdek kaynak kodundan doldurun
|
> - Dal ve yapılandırma dosyasını kendiniz OnePlus çekirdek kaynak kodundan doldurun
|
||||||
@@ -114,9 +121,11 @@ Lütfen **tümünü** https://kernelsu.org/zh_CN/guide/installation.html adresin
|
|||||||
## Lisans
|
## Lisans
|
||||||
|
|
||||||
- `kernel` dizinindeki dosyalar [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) lisansı altındadır.
|
- `kernel` dizinindeki dosyalar [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) lisansı altındadır.
|
||||||
- `kernel` dizini dışındaki tüm diğer bölümler [GPL-3.0 veya daha üstü](https://www.gnu.org/licenses/gpl-3.0.html) lisansı altındadır.
|
- Anime karakter ifadeleri içeren `ic_launcher*` dosyalarının görüntüleri [五十根大虾仁](https://space.bilibili.com/370927) tarafından telif hakkıyla korunmaktadır, görüntülerdeki Marka Fikri Mülkiyeti [明风 OuO](https://space.bilibili.com/274939213)'ye aittir ve vektörleştirme @MiRinChan tarafından yapılmıştır. Bu dosyaları kullanmadan önce, [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.txt) ile uyumlu olmanın yanı sıra, bu sanatsal içerikleri kullanmak için iki yazarın yetkilendirmesine de uymanız gerekir.
|
||||||
|
- Yukarıda belirtilen dosyalar veya dizinler hariç, diğer tüm parçalar [GPL-3.0 veya üzeri](https://www.gnu.org/licenses/gpl-3.0.html)'dir.
|
||||||
|
|
||||||
## Afdian Bağlantısı
|
## Afdian Bağlantısı
|
||||||
|
|
||||||
- https://afdian.com/a/shirkneko
|
- https://afdian.com/a/shirkneko
|
||||||
|
|
||||||
## Sponsor Listesi
|
## Sponsor Listesi
|
||||||
@@ -139,4 +148,4 @@ Eğer yukarıdaki listede adınız yoksa, zamanında güncelleyeceğim, herkese
|
|||||||
- [Magisk](https://github.com/topjohnwu/Magisk): Güçlü root aracı
|
- [Magisk](https://github.com/topjohnwu/Magisk): Güçlü root aracı
|
||||||
- [genuine](https://github.com/brevent/genuine/): APK v2 imza doğrulama
|
- [genuine](https://github.com/brevent/genuine/): APK v2 imza doğrulama
|
||||||
- [Diamorphine](https://github.com/m0nad/Diamorphine): Bazı rootkit becerileri
|
- [Diamorphine](https://github.com/m0nad/Diamorphine): Bazı rootkit becerileri
|
||||||
- [KernelPatch](https://github.com/bmax121/KernelPatch): KernelPatch, APatch\'in çekirdek modüllerini uygulamak için kritik bir parçadır
|
- [KernelPatch](https://github.com/bmax121/KernelPatch): KernelPatch, APatch\'in çekirdek modüllerini uygulamak için kritik bir parçadır
|
||||||
|
|||||||
@@ -14,12 +14,14 @@
|
|||||||
|
|
||||||
在内核源码的根目录下执行以下命令:
|
在内核源码的根目录下执行以下命令:
|
||||||
|
|
||||||
使用 main 分支 (不支持非GKI设备构建)
|
使用 main 分支 (不支持非 GKI 设备构建) (需要手动集成 susfs)
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s main
|
||||||
```
|
```
|
||||||
|
|
||||||
使用支持非 GKI 设备的分支
|
使用支持非 GKI 设备的分支 (需要手动集成 susfs)
|
||||||
|
|
||||||
```
|
```
|
||||||
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kernel/setup.sh" | bash -s nongki
|
||||||
```
|
```
|
||||||
@@ -37,15 +39,16 @@ curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kern
|
|||||||
- 此部分引用自 [rsuntk 的钩子方法](https://github.com/rsuntk/KernelSU)
|
- 此部分引用自 [rsuntk 的钩子方法](https://github.com/rsuntk/KernelSU)
|
||||||
|
|
||||||
1. **KPROBES 钩子:**
|
1. **KPROBES 钩子:**
|
||||||
- 用于可加载内核模块 (LKM)
|
|
||||||
- GKI 2.0 内核的默认钩子方法
|
- 用于可加载内核模块 (LKM)
|
||||||
- 需要 `CONFIG_KPROBES=y`
|
- GKI 2.0 内核的默认钩子方法
|
||||||
|
- 需要 `CONFIG_KPROBES=y`
|
||||||
|
|
||||||
2. **手动钩子:**
|
2. **手动钩子:**
|
||||||
- 标准的 KernelSU 钩子:https://kernelsu.org/guide/how-to-integrate-for-non-gki.html#manually-modify-the-kernel-source
|
- 标准的 KernelSU 钩子:https://kernelsu.org/guide/how-to-integrate-for-non-gki.html#manually-modify-the-kernel-source
|
||||||
- backslashxx 的 syscall 手动钩子:https://github.com/backslashxx/KernelSU/issues/5
|
- backslashxx 的 syscall 手动钩子:https://github.com/backslashxx/KernelSU/issues/5
|
||||||
- 非 GKI 内核的默认挂钩方法
|
- 非 GKI 内核的默认挂钩方法
|
||||||
- 需要 `CONFIG_KSU_MANUAL_HOOK=y`
|
- 需要 `CONFIG_KSU_MANUAL_HOOK=y`
|
||||||
|
|
||||||
## KPM 支持
|
## KPM 支持
|
||||||
|
|
||||||
@@ -57,16 +60,18 @@ curl -LSs "https://raw.githubusercontent.com/SukiSU-Ultra/SukiSU-Ultra/main/kern
|
|||||||
KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
||||||
|
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
>
|
||||||
> 1. 需要 `CONFIG_KPM=y`
|
> 1. 需要 `CONFIG_KPM=y`
|
||||||
> 2. 非GKI设备还需要 `CONFIG_KALLSYMS=y` 和 `CONFIG_KALLSYMS_ALL=y`
|
> 2. 非 GKI 设备还需要 `CONFIG_KALLSYMS=y` 和 `CONFIG_KALLSYMS_ALL=y`
|
||||||
> 3. 部分内核 `4.19` 以下源码还需要从 `4.19` 向后移植头文件 `set_memory.h`
|
> 3. 部分内核 `4.19` 以下源码还需要从 `4.19` 向后移植头文件 `set_memory.h`
|
||||||
|
|
||||||
|
## 如何进行系统更新保留 ROOT
|
||||||
|
|
||||||
## 如何进行系统更新保留ROOT
|
- OTA 后先不要重启,进入管理器刷写/修补内核界面,找到 `GKI/non_GKI安装` 选择需要刷写的 Anykernel3 内核压缩文件,选择与现在系统运行槽位相反的槽位进行刷写并重启即可保留 GKI 模式更新(暂不支持所有非 GKI 设备使用这种方法,请自行尝试。非 GKI 设备使用 TWRP 刷写是最稳妥的)
|
||||||
- OTA后先不要重启,进入管理器刷写/修补内核界面,找到 `GKI/non_GKI安装` 选择需要刷写的Anykernel3内核压缩文件,选择与现在系统运行槽位相反的槽位进行刷写并重启即可保留GKI模式更新(暂不支持所有非GKI设备使用这种方法,请自行尝试。非GKI设备使用TWRP刷写是最稳妥的)
|
- 或者使用 LKM 模式的安装到未使用的槽位(OTA 后)
|
||||||
- 或者使用LKM模式的安装到未使用的槽位(OTA后)
|
|
||||||
|
|
||||||
## 兼容状态
|
## 兼容状态
|
||||||
|
|
||||||
- KernelSU(v1.0.0 之前版本)正式支持 Android GKI 2.0 设备(内核 5.10+)
|
- KernelSU(v1.0.0 之前版本)正式支持 Android GKI 2.0 设备(内核 5.10+)
|
||||||
|
|
||||||
- 旧内核(4.4+)也兼容,但必须手动构建内核
|
- 旧内核(4.4+)也兼容,但必须手动构建内核
|
||||||
@@ -77,8 +82,11 @@ KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
|
|
||||||
## 更多链接
|
## 更多链接
|
||||||
|
|
||||||
|
**如果你需要为管理器提交翻译请前往** https://crowdin.com/project/SukiSU-Ultra
|
||||||
|
|
||||||
基于 SukiSU 和 susfs 编译的项目
|
基于 SukiSU 和 susfs 编译的项目
|
||||||
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
|
||||||
|
- [GKI](https://github.com/ShirkNeko/GKI_KernelSU_SUSFS)
|
||||||
- [一加](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
- [一加](https://github.com/ShirkNeko/Action_OnePlus_MKSU_SUSFS)
|
||||||
|
|
||||||
## 使用方法
|
## 使用方法
|
||||||
@@ -88,16 +96,17 @@ KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
请**全部**参考 https://kernelsu.org/zh_CN/guide/installation.html
|
请**全部**参考 https://kernelsu.org/zh_CN/guide/installation.html
|
||||||
|
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
>
|
||||||
> 1. 适用于如小米、红米、三星等的 GKI 2.0 的设备 (不包含魔改内核的厂商如魅族、一加、真我和 oppo)
|
> 1. 适用于如小米、红米、三星等的 GKI 2.0 的设备 (不包含魔改内核的厂商如魅族、一加、真我和 oppo)
|
||||||
> 2. 找到[更多链接](#%E6%9B%B4%E5%A4%9A%E9%93%BE%E6%8E%A5)里的 GKI 构建的项目。找到设备内核版本。然后下载下来,用TWRP或者内核刷写工具刷入带 AnyKernel3 后缀的压缩包即可
|
> 2. 找到[更多链接](#%E6%9B%B4%E5%A4%9A%E9%93%BE%E6%8E%A5)里的 GKI 构建的项目。找到设备内核版本。然后下载下来,用 TWRP 或者内核刷写工具刷入带 AnyKernel3 后缀的压缩包即可
|
||||||
> 3. 一般不带后缀的 .zip 压缩包是未压缩的,gz 后缀的为天玑机型所使用的压缩方式
|
> 3. 一般不带后缀的 .zip 压缩包是未压缩的,gz 后缀的为天玑机型所使用的压缩方式
|
||||||
|
|
||||||
|
|
||||||
### 一加
|
### 一加
|
||||||
|
|
||||||
1.找到更多链接里的一加项目进行自行填写,然后云编译构建,最后刷入带 AnyKernel3 后缀的压缩包即可
|
1.找到更多链接里的一加项目进行自行填写,然后云编译构建,最后刷入带 AnyKernel3 后缀的压缩包即可
|
||||||
|
|
||||||
> [!Note]
|
> [!Note]
|
||||||
|
>
|
||||||
> - 内核版本只需要填写前两位即可,如 5.10,5.15,6.1,6.6
|
> - 内核版本只需要填写前两位即可,如 5.10,5.15,6.1,6.6
|
||||||
> - 处理器代号请自行搜索,一般为全英文不带数字的代号
|
> - 处理器代号请自行搜索,一般为全英文不带数字的代号
|
||||||
> - 分支和配置文件请自行到一加内核开源地址进行填写
|
> - 分支和配置文件请自行到一加内核开源地址进行填写
|
||||||
@@ -114,9 +123,11 @@ KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
## 许可证
|
## 许可证
|
||||||
|
|
||||||
- `kernel` 目录下的文件是 [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)。
|
- `kernel` 目录下的文件是 [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)。
|
||||||
- 除 `kernel` 目录外,所有其他部分均为 [GPL-3.0 或更高版本](https://www.gnu.org/licenses/gpl-3.0.html)。
|
- 有动漫人物图片表情包的这些文件 `ic_launcher*` 的图像版权为[五十根大虾仁](https://space.bilibili.com/370927)所有,图像中的 Brand Intellectual Property 由[明风OuO](https://space.bilibili.com/274939213)所有,矢量化由 @MiRinChan 完成,在使用这些文件之前,除了必须遵守 [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.txt) 以外,还需要遵守向前两者索要使用这些艺术内容的授权。
|
||||||
|
- 除了以上所述的文件或目录外,所有其他部分均为 [GPL-3.0 或更高版本](https://www.gnu.org/licenses/gpl-3.0.html)。
|
||||||
|
|
||||||
## 爱发电链接
|
## 爱发电链接
|
||||||
|
|
||||||
- https://afdian.com/a/shirkneko
|
- https://afdian.com/a/shirkneko
|
||||||
|
|
||||||
## 赞助名单
|
## 赞助名单
|
||||||
@@ -133,10 +144,10 @@ KPM 模板地址: https://github.com/udochina/KPM-Build-Anywhere
|
|||||||
|
|
||||||
- [KernelSU](https://github.com/tiann/KernelSU):原始项目
|
- [KernelSU](https://github.com/tiann/KernelSU):原始项目
|
||||||
- [MKSU](https://github.com/5ec1cff/KernelSU):使用的项目
|
- [MKSU](https://github.com/5ec1cff/KernelSU):使用的项目
|
||||||
- [RKSU](https://github.com/rsuntk/KernelsU):使用该项目的 kernel 对非GKI设备重新进行支持
|
- [RKSU](https://github.com/rsuntk/KernelsU):使用该项目的 kernel 对非 GKI 设备重新进行支持
|
||||||
- [susfs4ksu](https://gitlab.com/simonpunk/susfs4ksu):使用的 susfs 文件系统
|
- [susfs4ksu](https://gitlab.com/simonpunk/susfs4ksu):使用的 susfs 文件系统
|
||||||
- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/):KernelSU 的构想
|
- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/):KernelSU 的构想
|
||||||
- [Magisk](https://github.com/topjohnwu/Magisk):强大的 root 工具
|
- [Magisk](https://github.com/topjohnwu/Magisk):强大的 root 工具
|
||||||
- [genuine](https://github.com/brevent/genuine/):APK v2 签名验证
|
- [genuine](https://github.com/brevent/genuine/):APK v2 签名验证
|
||||||
- [Diamorphine](https://github.com/m0nad/Diamorphine):一些 rootkit 技能
|
- [Diamorphine](https://github.com/m0nad/Diamorphine):一些 rootkit 技能
|
||||||
- [KernelPatch](https://github.com/bmax121/KernelPatch): KernelPatch 是 APatch 实现内核模块的关键部分
|
- [KernelPatch](https://github.com/bmax121/KernelPatch): KernelPatch 是 APatch 实现内核模块的关键部分
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ int ksu_handle_rename(struct dentry *old_dentry, struct dentry *new_dentry)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_EXT4_FS
|
||||||
static void nuke_ext4_sysfs() {
|
static void nuke_ext4_sysfs() {
|
||||||
struct path path;
|
struct path path;
|
||||||
int err = kern_path("/data/adb/modules", 0, &path);
|
int err = kern_path("/data/adb/modules", 0, &path);
|
||||||
@@ -243,6 +244,9 @@ static void nuke_ext4_sysfs() {
|
|||||||
|
|
||||||
ext4_unregister_sysfs(sb);
|
ext4_unregister_sysfs(sb);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static inline void nuke_ext4_sysfs() { }
|
||||||
|
#endif
|
||||||
|
|
||||||
int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
||||||
unsigned long arg4, unsigned long arg5)
|
unsigned long arg4, unsigned long arg5)
|
||||||
@@ -425,6 +429,13 @@ int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (arg2 == CMD_ENABLE_KPM) {
|
||||||
|
bool KPM_Enabled = IS_ENABLED(CONFIG_KPM);
|
||||||
|
if (copy_to_user((void __user *)arg3, &KPM_Enabled, sizeof(KPM_Enabled)))
|
||||||
|
pr_info("KPM: copy_to_user() failed\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// all other cmds are for 'root manager'
|
// all other cmds are for 'root manager'
|
||||||
if (!from_manager) {
|
if (!from_manager) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#define CMD_UID_SHOULD_UMOUNT 13
|
#define CMD_UID_SHOULD_UMOUNT 13
|
||||||
#define CMD_IS_SU_ENABLED 14
|
#define CMD_IS_SU_ENABLED 14
|
||||||
#define CMD_ENABLE_SU 15
|
#define CMD_ENABLE_SU 15
|
||||||
|
#define CMD_ENABLE_KPM 100
|
||||||
|
|
||||||
#define EVENT_POST_FS_DATA 1
|
#define EVENT_POST_FS_DATA 1
|
||||||
#define EVENT_BOOT_COMPLETED 2
|
#define EVENT_BOOT_COMPLETED 2
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
aidl = true
|
|
||||||
buildConfig = true
|
buildConfig = true
|
||||||
compose = true
|
compose = true
|
||||||
prefab = true
|
prefab = true
|
||||||
@@ -109,6 +108,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(libs.gson)
|
||||||
implementation(libs.androidx.activity.compose)
|
implementation(libs.androidx.activity.compose)
|
||||||
implementation(libs.androidx.navigation.compose)
|
implementation(libs.androidx.navigation.compose)
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
package com.sukisu.zako;
|
|
||||||
|
|
||||||
import android.content.pm.PackageInfo;
|
|
||||||
import rikka.parcelablelist.ParcelableListSlice;
|
|
||||||
|
|
||||||
interface IKsuInterface {
|
|
||||||
ParcelableListSlice<PackageInfo> getPackages(int flags);
|
|
||||||
}
|
|
||||||
@@ -305,4 +305,9 @@ extern "C"
|
|||||||
JNIEXPORT jboolean JNICALL
|
JNIEXPORT jboolean JNICALL
|
||||||
Java_com_sukisu_ultra_Natives_setSuEnabled(JNIEnv *env, jobject thiz, jboolean enabled) {
|
Java_com_sukisu_ultra_Natives_setSuEnabled(JNIEnv *env, jobject thiz, jboolean enabled) {
|
||||||
return set_su_enabled(enabled);
|
return set_su_enabled(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" JNIEXPORT jboolean JNICALL
|
||||||
|
Java_com_sukisu_ultra_Natives_isKPMEnabled(JNIEnv *env, jobject) {
|
||||||
|
return is_KPM_enable();
|
||||||
}
|
}
|
||||||
@@ -29,6 +29,7 @@
|
|||||||
#define CMD_IS_UID_SHOULD_UMOUNT 13
|
#define CMD_IS_UID_SHOULD_UMOUNT 13
|
||||||
#define CMD_IS_SU_ENABLED 14
|
#define CMD_IS_SU_ENABLED 14
|
||||||
#define CMD_ENABLE_SU 15
|
#define CMD_ENABLE_SU 15
|
||||||
|
#define CMD_ENABLE_KPM 100
|
||||||
|
|
||||||
static bool ksuctl(int cmd, void* arg1, void* arg2) {
|
static bool ksuctl(int cmd, void* arg1, void* arg2) {
|
||||||
int32_t result = 0;
|
int32_t result = 0;
|
||||||
@@ -96,4 +97,9 @@ bool is_su_enabled() {
|
|||||||
// if ksuctl failed, we assume su is enabled, and it cannot be disabled.
|
// if ksuctl failed, we assume su is enabled, and it cannot be disabled.
|
||||||
ksuctl(CMD_IS_SU_ENABLED, &enabled, nullptr);
|
ksuctl(CMD_IS_SU_ENABLED, &enabled, nullptr);
|
||||||
return enabled;
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool is_KPM_enable() {
|
||||||
|
bool enabled = false;
|
||||||
|
return ksuctl(CMD_ENABLE_KPM, &enabled, nullptr), enabled;
|
||||||
}
|
}
|
||||||
@@ -83,4 +83,6 @@ bool set_su_enabled(bool enabled);
|
|||||||
|
|
||||||
bool is_su_enabled();
|
bool is_su_enabled();
|
||||||
|
|
||||||
|
bool is_KPM_enable();
|
||||||
|
|
||||||
#endif //KERNELSU_KSU_H
|
#endif //KERNELSU_KSU_H
|
||||||
|
|||||||
BIN
manager/app/src/main/ic_launcher-playstore.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
@@ -8,24 +8,13 @@ import android.system.Os
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
data class KernelVersion(val major: Int, val patchLevel: Int, val subLevel: Int) {
|
data class KernelVersion(val major: Int, val patchLevel: Int, val subLevel: Int) {
|
||||||
override fun toString(): String {
|
override fun toString(): String = "$major.$patchLevel.$subLevel"
|
||||||
return "$major.$patchLevel.$subLevel"
|
fun isGKI(): Boolean = when {
|
||||||
}
|
major > 5 -> true
|
||||||
|
major == 5 && patchLevel >= 10 -> true
|
||||||
fun isGKI(): Boolean {
|
else -> false
|
||||||
|
|
||||||
// kernel 6.x
|
|
||||||
if (major > 5) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// kernel 5.10.x
|
|
||||||
if (major == 5) {
|
|
||||||
return patchLevel >= 10
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
fun isGKI1(): Boolean = (major == 4 && patchLevel >= 19) || (major == 5 && patchLevel < 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseKernelVersion(version: String): KernelVersion {
|
fun parseKernelVersion(version: String): KernelVersion {
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ object Natives {
|
|||||||
const val MINIMAL_SUPPORTED_SU_COMPAT = 12040
|
const val MINIMAL_SUPPORTED_SU_COMPAT = 12040
|
||||||
const val KERNEL_SU_DOMAIN = "u:r:su:s0"
|
const val KERNEL_SU_DOMAIN = "u:r:su:s0"
|
||||||
|
|
||||||
|
const val MINIMAL_SUPPORTED_KPM = 12800
|
||||||
|
|
||||||
const val ROOT_UID = 0
|
const val ROOT_UID = 0
|
||||||
const val ROOT_GID = 0
|
const val ROOT_GID = 0
|
||||||
|
|
||||||
@@ -66,6 +68,7 @@ object Natives {
|
|||||||
*/
|
*/
|
||||||
external fun isSuEnabled(): Boolean
|
external fun isSuEnabled(): Boolean
|
||||||
external fun setSuEnabled(enabled: Boolean): Boolean
|
external fun setSuEnabled(enabled: Boolean): Boolean
|
||||||
|
external fun isKPMEnabled(): Boolean
|
||||||
|
|
||||||
private const val NON_ROOT_DEFAULT_PROFILE_KEY = "$"
|
private const val NON_ROOT_DEFAULT_PROFILE_KEY = "$"
|
||||||
private const val NOBODY_UID = 9999
|
private const val NOBODY_UID = 9999
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ import java.io.File
|
|||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
data class FlashState(
|
data class FlashState(
|
||||||
val isFlashing: Boolean = false,
|
val isFlashing: Boolean = false,
|
||||||
val isCompleted: Boolean = false,
|
val isCompleted: Boolean = false,
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import androidx.navigation.compose.rememberNavController
|
|||||||
import com.ramcosta.composedestinations.DestinationsNavHost
|
import com.ramcosta.composedestinations.DestinationsNavHost
|
||||||
import com.ramcosta.composedestinations.animations.NavHostAnimatedDestinationStyle
|
import com.ramcosta.composedestinations.animations.NavHostAnimatedDestinationStyle
|
||||||
import com.ramcosta.composedestinations.generated.NavGraphs
|
import com.ramcosta.composedestinations.generated.NavGraphs
|
||||||
|
import com.ramcosta.composedestinations.generated.destinations.ExecuteModuleActionScreenDestination
|
||||||
import com.ramcosta.composedestinations.spec.NavHostGraphSpec
|
import com.ramcosta.composedestinations.spec.NavHostGraphSpec
|
||||||
import com.ramcosta.composedestinations.spec.RouteOrDirection
|
import com.ramcosta.composedestinations.spec.RouteOrDirection
|
||||||
import com.ramcosta.composedestinations.utils.isRouteOnBackStackAsState
|
import com.ramcosta.composedestinations.utils.isRouteOnBackStackAsState
|
||||||
@@ -39,8 +40,19 @@ import androidx.core.content.edit
|
|||||||
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
||||||
import com.sukisu.ultra.ui.webui.initPlatform
|
import com.sukisu.ultra.ui.webui.initPlatform
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
|
import androidx.compose.animation.slideInVertically
|
||||||
|
import androidx.compose.animation.slideOutVertically
|
||||||
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import com.sukisu.ultra.ui.viewmodel.HomeViewModel
|
||||||
|
import com.sukisu.ultra.ui.viewmodel.SuperUserViewModel
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
private lateinit var superUserViewModel: SuperUserViewModel
|
||||||
|
private lateinit var homeViewModel: HomeViewModel
|
||||||
|
|
||||||
private inner class ThemeChangeContentObserver(
|
private inner class ThemeChangeContentObserver(
|
||||||
handler: Handler,
|
handler: Handler,
|
||||||
private val onThemeChanged: () -> Unit
|
private val onThemeChanged: () -> Unit
|
||||||
@@ -90,10 +102,12 @@ class MainActivity : ComponentActivity() {
|
|||||||
super.attachBaseContext(context)
|
super.attachBaseContext(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
// 确保应用正确的语言设置
|
// 确保应用正确的语言设置
|
||||||
applyLanguageSetting()
|
applyLanguageSetting()
|
||||||
|
|
||||||
|
// 应用自定义 DPI
|
||||||
applyCustomDpi()
|
applyCustomDpi()
|
||||||
|
|
||||||
// Enable edge to edge
|
// Enable edge to edge
|
||||||
@@ -105,6 +119,21 @@ class MainActivity : ComponentActivity() {
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
// 初始化 SuperUserViewModel
|
||||||
|
superUserViewModel = SuperUserViewModel()
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
superUserViewModel.fetchAppList()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化 HomeViewModel
|
||||||
|
homeViewModel = HomeViewModel()
|
||||||
|
|
||||||
|
// 预加载数据
|
||||||
|
lifecycleScope.launch {
|
||||||
|
homeViewModel.initializeData()
|
||||||
|
}
|
||||||
|
|
||||||
val prefs = getSharedPreferences("settings", MODE_PRIVATE)
|
val prefs = getSharedPreferences("settings", MODE_PRIVATE)
|
||||||
val isFirstRun = prefs.getBoolean("is_first_run", true)
|
val isFirstRun = prefs.getBoolean("is_first_run", true)
|
||||||
|
|
||||||
@@ -152,6 +181,12 @@ class MainActivity : ComponentActivity() {
|
|||||||
KernelSUTheme {
|
KernelSUTheme {
|
||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
val snackBarHostState = remember { SnackbarHostState() }
|
val snackBarHostState = remember { SnackbarHostState() }
|
||||||
|
val currentDestination = navController.currentBackStackEntryAsState().value?.destination
|
||||||
|
|
||||||
|
val showBottomBar = when (currentDestination?.route) {
|
||||||
|
ExecuteModuleActionScreenDestination.route -> false // Hide for ExecuteModuleActionScreen
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
|
|
||||||
// pre-init platform to faster start WebUI X activities
|
// pre-init platform to faster start WebUI X activities
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
@@ -159,7 +194,15 @@ class MainActivity : ComponentActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
bottomBar = { BottomBar(navController) },
|
bottomBar = {
|
||||||
|
AnimatedVisibility(
|
||||||
|
visible = showBottomBar,
|
||||||
|
enter = slideInVertically(initialOffsetY = { it }) + fadeIn(),
|
||||||
|
exit = slideOutVertically(targetOffsetY = { it }) + fadeOut()
|
||||||
|
) {
|
||||||
|
BottomBar(navController)
|
||||||
|
}
|
||||||
|
},
|
||||||
contentWindowInsets = WindowInsets(0, 0, 0, 0)
|
contentWindowInsets = WindowInsets(0, 0, 0, 0)
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
CompositionLocalProvider(
|
CompositionLocalProvider(
|
||||||
@@ -217,6 +260,14 @@ class MainActivity : ComponentActivity() {
|
|||||||
if (!ThemeConfig.backgroundImageLoaded && !ThemeConfig.preventBackgroundRefresh) {
|
if (!ThemeConfig.backgroundImageLoaded && !ThemeConfig.preventBackgroundRefresh) {
|
||||||
loadCustomBackground()
|
loadCustomBackground()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
superUserViewModel.fetchAppList()
|
||||||
|
}
|
||||||
|
|
||||||
|
lifecycleScope.launch {
|
||||||
|
homeViewModel.initializeData()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val destroyListeners = mutableListOf<() -> Unit>()
|
private val destroyListeners = mutableListOf<() -> Unit>()
|
||||||
@@ -239,8 +290,7 @@ private fun BottomBar(navController: NavHostController) {
|
|||||||
val isManager = Natives.becomeManager(ksuApp.packageName)
|
val isManager = Natives.becomeManager(ksuApp.packageName)
|
||||||
val fullFeatured = isManager && !Natives.requireNewKernel() && rootAvailable()
|
val fullFeatured = isManager && !Natives.requireNewKernel() && rootAvailable()
|
||||||
val kpmVersion = getKpmVersion()
|
val kpmVersion = getKpmVersion()
|
||||||
val containerColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainer
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
|
||||||
|
|
||||||
// 检查是否显示KPM
|
// 检查是否显示KPM
|
||||||
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
@@ -252,45 +302,38 @@ private fun BottomBar(navController: NavHostController) {
|
|||||||
),
|
),
|
||||||
containerColor = TopAppBarDefaults.topAppBarColors(
|
containerColor = TopAppBarDefaults.topAppBarColors(
|
||||||
containerColor = cardColor.copy(alpha = cardAlpha),
|
containerColor = cardColor.copy(alpha = cardAlpha),
|
||||||
scrolledContainerColor = containerColor.copy(alpha = cardAlpha)
|
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
|
||||||
).containerColor,
|
).containerColor,
|
||||||
tonalElevation = cardElevation
|
tonalElevation = cardElevation
|
||||||
) {
|
) {
|
||||||
BottomBarDestination.entries.forEach { destination ->
|
BottomBarDestination.entries.forEach { destination ->
|
||||||
if (destination == BottomBarDestination.Kpm) {
|
if (destination == BottomBarDestination.Kpm) {
|
||||||
if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo) {
|
if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo && Natives.version >= Natives.MINIMAL_SUPPORTED_KPM) {
|
||||||
if (!fullFeatured && destination.rootRequired) return@forEach
|
if (!fullFeatured && destination.rootRequired) return@forEach
|
||||||
val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction)
|
val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction)
|
||||||
NavigationBarItem(
|
NavigationBarItem(
|
||||||
selected = isCurrentDestOnBackStack,
|
selected = isCurrentDestOnBackStack,
|
||||||
onClick = {
|
onClick = {
|
||||||
if (!isCurrentDestOnBackStack) {
|
if (!isCurrentDestOnBackStack) {
|
||||||
navigator.navigate(destination.direction) {
|
navigator.popBackStack(destination.direction, false)
|
||||||
popUpTo(NavGraphs.root as RouteOrDirection) {
|
}
|
||||||
saveState = true
|
navigator.navigate(destination.direction) {
|
||||||
}
|
popUpTo(NavGraphs.root as RouteOrDirection) {
|
||||||
launchSingleTop = true
|
saveState = true
|
||||||
restoreState = true
|
|
||||||
}
|
}
|
||||||
|
launchSingleTop = true
|
||||||
|
restoreState = true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
icon = {
|
icon = {
|
||||||
Icon(
|
if (isCurrentDestOnBackStack) {
|
||||||
imageVector = if (isCurrentDestOnBackStack) {
|
Icon(destination.iconSelected, stringResource(destination.label))
|
||||||
destination.iconSelected
|
} else {
|
||||||
} else {
|
Icon(destination.iconNotSelected, stringResource(destination.label))
|
||||||
destination.iconNotSelected
|
}
|
||||||
},
|
|
||||||
contentDescription = stringResource(destination.label),
|
|
||||||
tint = if (isCurrentDestOnBackStack) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
label = {
|
label = { Text(stringResource(destination.label),style = MaterialTheme.typography.labelMedium) },
|
||||||
Text(
|
alwaysShowLabel = false
|
||||||
text = stringResource(destination.label),
|
|
||||||
style = MaterialTheme.typography.labelMedium
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -299,33 +342,26 @@ private fun BottomBar(navController: NavHostController) {
|
|||||||
NavigationBarItem(
|
NavigationBarItem(
|
||||||
selected = isCurrentDestOnBackStack,
|
selected = isCurrentDestOnBackStack,
|
||||||
onClick = {
|
onClick = {
|
||||||
if (!isCurrentDestOnBackStack) {
|
if (isCurrentDestOnBackStack) {
|
||||||
navigator.navigate(destination.direction) {
|
navigator.popBackStack(destination.direction, false)
|
||||||
popUpTo(NavGraphs.root as RouteOrDirection) {
|
}
|
||||||
saveState = true
|
navigator.navigate(destination.direction) {
|
||||||
}
|
popUpTo(NavGraphs.root) {
|
||||||
launchSingleTop = true
|
saveState = true
|
||||||
restoreState = true
|
|
||||||
}
|
}
|
||||||
|
launchSingleTop = true
|
||||||
|
restoreState = true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
icon = {
|
icon = {
|
||||||
Icon(
|
if (isCurrentDestOnBackStack) {
|
||||||
imageVector = if (isCurrentDestOnBackStack) {
|
Icon(destination.iconSelected, stringResource(destination.label))
|
||||||
destination.iconSelected
|
} else {
|
||||||
} else {
|
Icon(destination.iconNotSelected, stringResource(destination.label))
|
||||||
destination.iconNotSelected
|
}
|
||||||
},
|
|
||||||
contentDescription = stringResource(destination.label),
|
|
||||||
tint = if (isCurrentDestOnBackStack) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
label = {
|
label = { Text(stringResource(destination.label),style = MaterialTheme.typography.labelMedium) },
|
||||||
Text(
|
alwaysShowLabel = false
|
||||||
text = stringResource(destination.label),
|
|
||||||
style = MaterialTheme.typography.labelMedium
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ fun SearchAppBar(
|
|||||||
var onSearch by remember { mutableStateOf(false) }
|
var onSearch by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
// 获取卡片颜色和透明度
|
// 获取卡片颜色和透明度
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = CardConfig.cardAlpha
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
if (onSearch) {
|
if (onSearch) {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import androidx.compose.foundation.selection.toggleable
|
|||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.ListItem
|
import androidx.compose.material3.ListItem
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.RadioButton
|
|
||||||
import androidx.compose.material3.Switch
|
import androidx.compose.material3.Switch
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
@@ -85,20 +84,4 @@ fun SwitchItem(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun RadioItem(
|
|
||||||
title: String,
|
|
||||||
selected: Boolean,
|
|
||||||
onClick: () -> Unit,
|
|
||||||
) {
|
|
||||||
ListItem(
|
|
||||||
headlineContent = {
|
|
||||||
Text(title)
|
|
||||||
},
|
|
||||||
leadingContent = {
|
|
||||||
RadioButton(selected = selected, onClick = onClick)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
@@ -122,7 +122,7 @@ fun AppProfileScreen(
|
|||||||
mutableStateOf(initialProfile)
|
mutableStateOf(initialProfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = CardConfig.cardAlpha
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.sukisu.ultra.ui.screen
|
|||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.*
|
import androidx.compose.material.icons.filled.*
|
||||||
|
import androidx.compose.material.icons.filled.Archive
|
||||||
import androidx.compose.material.icons.outlined.*
|
import androidx.compose.material.icons.outlined.*
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import com.ramcosta.composedestinations.generated.destinations.HomeScreenDestination
|
import com.ramcosta.composedestinations.generated.destinations.HomeScreenDestination
|
||||||
@@ -21,8 +22,8 @@ enum class BottomBarDestination(
|
|||||||
val rootRequired: Boolean,
|
val rootRequired: Boolean,
|
||||||
) {
|
) {
|
||||||
Home(HomeScreenDestination, R.string.home, Icons.Filled.Home, Icons.Outlined.Home, false),
|
Home(HomeScreenDestination, R.string.home, Icons.Filled.Home, Icons.Outlined.Home, false),
|
||||||
Kpm(KpmScreenDestination, R.string.kpm_title, Icons.Filled.Build, Icons.Outlined.Build, true),
|
Kpm(KpmScreenDestination, R.string.kpm_title, Icons.Filled.Archive, Icons.Outlined.Archive, true),
|
||||||
SuperUser(SuperUserScreenDestination, R.string.superuser, Icons.Filled.Security, Icons.Outlined.Security, true),
|
SuperUser(SuperUserScreenDestination, R.string.superuser, Icons.Filled.AdminPanelSettings, Icons.Outlined.AdminPanelSettings, true),
|
||||||
Module(ModuleScreenDestination, R.string.module, Icons.Filled.Apps, Icons.Outlined.Apps, true),
|
Module(ModuleScreenDestination, R.string.module, Icons.Filled.Extension, Icons.Outlined.Extension, true),
|
||||||
Settings(SettingScreenDestination, R.string.settings, Icons.Filled.Settings, Icons.Outlined.Settings, false),
|
Settings(SettingScreenDestination, R.string.settings, Icons.Filled.Settings, Icons.Outlined.Settings, false),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,22 @@
|
|||||||
package com.sukisu.ultra.ui.screen
|
package com.sukisu.ultra.ui.screen
|
||||||
|
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
import androidx.compose.foundation.layout.WindowInsets
|
||||||
|
import androidx.compose.foundation.layout.WindowInsetsSides
|
||||||
|
import androidx.compose.foundation.layout.defaultMinSize
|
||||||
|
import androidx.compose.foundation.layout.safeDrawing
|
||||||
|
import androidx.compose.foundation.layout.only
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
import androidx.compose.material.icons.filled.Close
|
||||||
import androidx.compose.material.icons.filled.Save
|
import androidx.compose.material.icons.filled.Save
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.ExtendedFloatingActionButton
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
@@ -30,7 +37,6 @@ import androidx.compose.ui.input.key.key
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.font.FontFamily
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.compose.dropUnlessResumed
|
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootGraph
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
@@ -55,7 +61,11 @@ fun ExecuteModuleActionScreen(navigator: DestinationsNavigator, moduleId: String
|
|||||||
val snackBarHost = LocalSnackbarHost.current
|
val snackBarHost = LocalSnackbarHost.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val scrollState = rememberScrollState()
|
val scrollState = rememberScrollState()
|
||||||
var actionResult: Boolean
|
var isActionRunning by rememberSaveable { mutableStateOf(true) }
|
||||||
|
|
||||||
|
BackHandler(enabled = isActionRunning) {
|
||||||
|
// Disable back button if action is running
|
||||||
|
}
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
if (text.isNotEmpty()) {
|
if (text.isNotEmpty()) {
|
||||||
@@ -76,33 +86,43 @@ fun ExecuteModuleActionScreen(navigator: DestinationsNavigator, moduleId: String
|
|||||||
onStderr = {
|
onStderr = {
|
||||||
logContent.append(it).append("\n")
|
logContent.append(it).append("\n")
|
||||||
}
|
}
|
||||||
).let {
|
)
|
||||||
actionResult = it
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (actionResult) navigator.popBackStack()
|
isActionRunning = false
|
||||||
}
|
}
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopBar(
|
TopBar(
|
||||||
onBack = dropUnlessResumed {
|
isActionRunning = isActionRunning,
|
||||||
navigator.popBackStack()
|
|
||||||
},
|
|
||||||
onSave = {
|
onSave = {
|
||||||
scope.launch {
|
if (!isActionRunning) {
|
||||||
val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault())
|
scope.launch {
|
||||||
val date = format.format(Date())
|
val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault())
|
||||||
val file = File(
|
val date = format.format(Date())
|
||||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
|
val file = File(
|
||||||
"KernelSU_module_action_log_${date}.log"
|
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
|
||||||
)
|
"KernelSU_module_action_log_${date}.log"
|
||||||
file.writeText(logContent.toString())
|
)
|
||||||
snackBarHost.showSnackbar("Log saved to ${file.absolutePath}")
|
file.writeText(logContent.toString())
|
||||||
|
snackBarHost.showSnackbar("Log saved to ${file.absolutePath}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
floatingActionButton = {
|
||||||
|
if (!isActionRunning) {
|
||||||
|
ExtendedFloatingActionButton(
|
||||||
|
text = { Text(text = stringResource(R.string.close)) },
|
||||||
|
icon = { Icon(Icons.Filled.Close, contentDescription = null) },
|
||||||
|
onClick = {
|
||||||
|
navigator.popBackStack()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
contentWindowInsets = WindowInsets.safeDrawing,
|
||||||
snackbarHost = { SnackbarHost(snackBarHost) }
|
snackbarHost = { SnackbarHost(snackBarHost) }
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
KeyEventBlocker {
|
KeyEventBlocker {
|
||||||
@@ -130,16 +150,14 @@ fun ExecuteModuleActionScreen(navigator: DestinationsNavigator, moduleId: String
|
|||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
private fun TopBar(onBack: () -> Unit = {}, onSave: () -> Unit = {}) {
|
private fun TopBar(isActionRunning: Boolean, onSave: () -> Unit = {}) {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
title = { Text(stringResource(R.string.action)) },
|
title = { Text(stringResource(R.string.action)) },
|
||||||
navigationIcon = {
|
|
||||||
IconButton(
|
|
||||||
onClick = onBack
|
|
||||||
) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) }
|
|
||||||
},
|
|
||||||
actions = {
|
actions = {
|
||||||
IconButton(onClick = onSave) {
|
IconButton(
|
||||||
|
onClick = onSave,
|
||||||
|
enabled = !isActionRunning
|
||||||
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.Save,
|
imageVector = Icons.Filled.Save,
|
||||||
contentDescription = stringResource(id = R.string.save_log),
|
contentDescription = stringResource(id = R.string.save_log),
|
||||||
@@ -147,4 +165,4 @@ private fun TopBar(onBack: () -> Unit = {}, onSave: () -> Unit = {}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,11 +47,16 @@ import com.sukisu.ultra.ui.component.KeyEventBlocker
|
|||||||
import com.sukisu.ultra.ui.util.*
|
import com.sukisu.ultra.ui.util.*
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import com.sukisu.ultra.ui.theme.CardConfig
|
import com.sukisu.ultra.ui.theme.CardConfig
|
||||||
|
import com.sukisu.ultra.ui.viewmodel.ModuleViewModel
|
||||||
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.zip.ZipInputStream
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
enum class FlashingStatus {
|
enum class FlashingStatus {
|
||||||
FLASHING,
|
FLASHING,
|
||||||
SUCCESS,
|
SUCCESS,
|
||||||
@@ -110,6 +115,7 @@ fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
|||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val scrollState = rememberScrollState()
|
val scrollState = rememberScrollState()
|
||||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||||
|
val viewModel: ModuleViewModel = viewModel()
|
||||||
|
|
||||||
val errorCodeString = stringResource(R.string.error_code)
|
val errorCodeString = stringResource(R.string.error_code)
|
||||||
val checkLogString = stringResource(R.string.check_log)
|
val checkLogString = stringResource(R.string.check_log)
|
||||||
@@ -163,6 +169,7 @@ fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setFlashingStatus(FlashingStatus.SUCCESS)
|
setFlashingStatus(FlashingStatus.SUCCESS)
|
||||||
|
viewModel.markNeedRefresh()
|
||||||
}
|
}
|
||||||
if (showReboot) {
|
if (showReboot) {
|
||||||
text += "\n\n\n"
|
text += "\n\n\n"
|
||||||
@@ -197,6 +204,8 @@ fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) {
|
|||||||
if (flashIt is FlashIt.FlashBoot) {
|
if (flashIt is FlashIt.FlashBoot) {
|
||||||
navigator.popBackStack()
|
navigator.popBackStack()
|
||||||
} else {
|
} else {
|
||||||
|
viewModel.markNeedRefresh()
|
||||||
|
viewModel.fetchModuleList()
|
||||||
navigator.navigate(ModuleScreenDestination) {
|
navigator.navigate(ModuleScreenDestination) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -430,7 +439,7 @@ private fun TopBar(
|
|||||||
onSave: () -> Unit = {},
|
onSave: () -> Unit = {},
|
||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
) {
|
) {
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = CardConfig.cardAlpha
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
val statusColor = when(status) {
|
val statusColor = when(status) {
|
||||||
@@ -493,26 +502,13 @@ private fun TopBar(
|
|||||||
suspend fun getModuleNameFromUri(context: android.content.Context, uri: Uri): String {
|
suspend fun getModuleNameFromUri(context: android.content.Context, uri: Uri): String {
|
||||||
return withContext(Dispatchers.IO) {
|
return withContext(Dispatchers.IO) {
|
||||||
try {
|
try {
|
||||||
val zipInputStream = ZipInputStream(context.contentResolver.openInputStream(uri))
|
if (uri == Uri.EMPTY) {
|
||||||
var entry = zipInputStream.nextEntry
|
return@withContext context.getString(R.string.unknown_module)
|
||||||
var name = context.getString(R.string.unknown_module)
|
|
||||||
|
|
||||||
while (entry != null) {
|
|
||||||
if (entry.name == "module.prop") {
|
|
||||||
val reader = java.io.BufferedReader(java.io.InputStreamReader(zipInputStream))
|
|
||||||
var line: String?
|
|
||||||
while (reader.readLine().also { line = it } != null) {
|
|
||||||
if (line?.startsWith("name=") == true) {
|
|
||||||
name = line.substringAfter("=")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
entry = zipInputStream.nextEntry
|
|
||||||
}
|
}
|
||||||
zipInputStream.close()
|
if (!ModuleUtils.isUriAccessible(context, uri)) {
|
||||||
name
|
return@withContext context.getString(R.string.unknown_module)
|
||||||
|
}
|
||||||
|
ModuleUtils.extractModuleName(context, uri)
|
||||||
} catch (_: Exception) {
|
} catch (_: Exception) {
|
||||||
context.getString(R.string.unknown_module)
|
context.getString(R.string.unknown_module)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,11 +15,13 @@ import androidx.compose.animation.fadeOut
|
|||||||
import androidx.compose.animation.shrinkVertically
|
import androidx.compose.animation.shrinkVertically
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.WindowInsets
|
import androidx.compose.foundation.layout.WindowInsets
|
||||||
import androidx.compose.foundation.layout.WindowInsetsSides
|
import androidx.compose.foundation.layout.WindowInsetsSides
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.only
|
import androidx.compose.foundation.layout.only
|
||||||
@@ -29,23 +31,24 @@ import androidx.compose.foundation.layout.size
|
|||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.layout.wrapContentHeight
|
import androidx.compose.foundation.layout.wrapContentHeight
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
import androidx.compose.material.ExperimentalMaterialApi
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Android
|
import androidx.compose.material.icons.filled.Android
|
||||||
import androidx.compose.material.icons.filled.Archive
|
import androidx.compose.material.icons.filled.Archive
|
||||||
import androidx.compose.material.icons.filled.Code
|
|
||||||
import androidx.compose.material.icons.filled.Info
|
import androidx.compose.material.icons.filled.Info
|
||||||
import androidx.compose.material.icons.filled.Memory
|
import androidx.compose.material.icons.filled.Memory
|
||||||
import androidx.compose.material.icons.filled.PhoneAndroid
|
import androidx.compose.material.icons.filled.PhoneAndroid
|
||||||
import androidx.compose.material.icons.filled.Refresh
|
import androidx.compose.material.icons.filled.Refresh
|
||||||
import androidx.compose.material.icons.filled.Security
|
import androidx.compose.material.icons.filled.Security
|
||||||
import androidx.compose.material.icons.filled.Settings
|
import androidx.compose.material.icons.filled.SettingsSuggest
|
||||||
import androidx.compose.material.icons.filled.Storage
|
import androidx.compose.material.icons.filled.Storage
|
||||||
import androidx.compose.material.icons.filled.Warning
|
|
||||||
import androidx.compose.material.icons.outlined.Block
|
import androidx.compose.material.icons.outlined.Block
|
||||||
import androidx.compose.material.icons.outlined.CheckCircle
|
import androidx.compose.material.icons.outlined.TaskAlt
|
||||||
import androidx.compose.material.icons.outlined.Info
|
|
||||||
import androidx.compose.material.icons.outlined.Warning
|
import androidx.compose.material.icons.outlined.Warning
|
||||||
|
import androidx.compose.material.pullrefresh.pullRefresh
|
||||||
|
import androidx.compose.material.pullrefresh.rememberPullRefreshState
|
||||||
import androidx.compose.material3.CardDefaults
|
import androidx.compose.material3.CardDefaults
|
||||||
import androidx.compose.material3.DropdownMenu
|
import androidx.compose.material3.DropdownMenu
|
||||||
import androidx.compose.material3.DropdownMenuItem
|
import androidx.compose.material3.DropdownMenuItem
|
||||||
@@ -55,22 +58,21 @@ import androidx.compose.material3.Icon
|
|||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
|
import androidx.compose.material3.Surface
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TopAppBar
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.material3.TopAppBarScrollBehavior
|
import androidx.compose.material3.TopAppBarScrollBehavior
|
||||||
|
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
|
||||||
import androidx.compose.material3.rememberTopAppBarState
|
import androidx.compose.material3.rememberTopAppBarState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
|
||||||
import androidx.compose.runtime.mutableLongStateOf
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.produceState
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.runtime.snapshotFlow
|
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.composed
|
import androidx.compose.ui.composed
|
||||||
@@ -84,8 +86,8 @@ import androidx.compose.ui.platform.LocalUriHandler
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.content.edit
|
|
||||||
import androidx.core.content.pm.PackageInfoCompat
|
import androidx.core.content.pm.PackageInfoCompat
|
||||||
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootGraph
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
import com.ramcosta.composedestinations.generated.destinations.InstallScreenDestination
|
import com.ramcosta.composedestinations.generated.destinations.InstallScreenDestination
|
||||||
@@ -93,8 +95,6 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
|||||||
import com.sukisu.ultra.KernelVersion
|
import com.sukisu.ultra.KernelVersion
|
||||||
import com.sukisu.ultra.Natives
|
import com.sukisu.ultra.Natives
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import com.sukisu.ultra.getKernelVersion
|
|
||||||
import com.sukisu.ultra.ksuApp
|
|
||||||
import com.sukisu.ultra.ui.component.KsuIsValid
|
import com.sukisu.ultra.ui.component.KsuIsValid
|
||||||
import com.sukisu.ultra.ui.component.rememberConfirmDialog
|
import com.sukisu.ultra.ui.component.rememberConfirmDialog
|
||||||
import com.sukisu.ultra.ui.theme.CardConfig
|
import com.sukisu.ultra.ui.theme.CardConfig
|
||||||
@@ -104,68 +104,46 @@ import com.sukisu.ultra.ui.util.checkNewVersion
|
|||||||
import com.sukisu.ultra.ui.util.getKpmModuleCount
|
import com.sukisu.ultra.ui.util.getKpmModuleCount
|
||||||
import com.sukisu.ultra.ui.util.getKpmVersion
|
import com.sukisu.ultra.ui.util.getKpmVersion
|
||||||
import com.sukisu.ultra.ui.util.getModuleCount
|
import com.sukisu.ultra.ui.util.getModuleCount
|
||||||
import com.sukisu.ultra.ui.util.getSELinuxStatus
|
|
||||||
import com.sukisu.ultra.ui.util.getSuSFS
|
|
||||||
import com.sukisu.ultra.ui.util.getSuSFSFeatures
|
|
||||||
import com.sukisu.ultra.ui.util.getSuSFSVariant
|
|
||||||
import com.sukisu.ultra.ui.util.getSuSFSVersion
|
|
||||||
import com.sukisu.ultra.ui.util.getSuperuserCount
|
import com.sukisu.ultra.ui.util.getSuperuserCount
|
||||||
import com.sukisu.ultra.ui.util.module.LatestVersionInfo
|
import com.sukisu.ultra.ui.util.module.LatestVersionInfo
|
||||||
import com.sukisu.ultra.ui.util.reboot
|
import com.sukisu.ultra.ui.util.reboot
|
||||||
import com.sukisu.ultra.ui.util.rootAvailable
|
import com.sukisu.ultra.ui.viewmodel.HomeViewModel
|
||||||
import com.sukisu.ultra.ui.util.susfsSUS_SU_Mode
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.FlowPreview
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.flow.debounce
|
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.io.BufferedReader
|
|
||||||
import java.io.InputStreamReader
|
|
||||||
import java.util.zip.GZIPInputStream
|
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class, FlowPreview::class)
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterialApi::class)
|
||||||
@Destination<RootGraph>(start = true)
|
@Destination<RootGraph>(start = true)
|
||||||
@Composable
|
@Composable
|
||||||
fun HomeScreen(navigator: DestinationsNavigator) {
|
fun HomeScreen(navigator: DestinationsNavigator) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
var isSimpleMode by rememberSaveable { mutableStateOf(false) }
|
val viewModel = viewModel<HomeViewModel>()
|
||||||
var isHideVersion by rememberSaveable { mutableStateOf(false) }
|
val coroutineScope = rememberCoroutineScope()
|
||||||
var isHideOtherInfo by rememberSaveable { mutableStateOf(false) }
|
|
||||||
var isHideSusfsStatus by rememberSaveable { mutableStateOf(false) }
|
|
||||||
var isHideLinkCard by rememberSaveable { mutableStateOf(false) }
|
|
||||||
var showKpmInfo by rememberSaveable { mutableStateOf(true) }
|
|
||||||
|
|
||||||
// 从 SharedPreferences 加载简洁模式状态
|
LaunchedEffect(key1 = navigator) {
|
||||||
LaunchedEffect(Unit) {
|
coroutineScope.launch {
|
||||||
isSimpleMode = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
viewModel.refreshAllData(context)
|
||||||
.getBoolean("is_simple_mode", false)
|
}
|
||||||
|
}
|
||||||
isHideVersion = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_version", false)
|
LaunchedEffect(Unit) {
|
||||||
|
viewModel.loadUserSettings(context)
|
||||||
isHideOtherInfo = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
viewModel.initializeData()
|
||||||
.getBoolean("is_hide_other_info", false)
|
viewModel.checkForUpdates(context)
|
||||||
|
|
||||||
isHideSusfsStatus = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_susfs_status", false)
|
|
||||||
|
|
||||||
isHideLinkCard = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_link_card", false)
|
|
||||||
|
|
||||||
showKpmInfo = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("show_kpm_info", true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val kernelVersion = getKernelVersion()
|
|
||||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||||
val scrollState = rememberScrollState()
|
val scrollState = rememberScrollState()
|
||||||
val debounceTime = 100L
|
|
||||||
var lastScrollTime by remember { mutableLongStateOf(0L) }
|
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopBar(
|
TopBar(
|
||||||
kernelVersion,
|
kernelVersion = viewModel.systemStatus.kernelVersion,
|
||||||
onInstallClick = { navigator.navigate(InstallScreenDestination) },
|
onInstallClick = { navigator.navigate(InstallScreenDestination) },
|
||||||
scrollBehavior = scrollBehavior
|
scrollBehavior = scrollBehavior
|
||||||
)
|
)
|
||||||
@@ -174,117 +152,77 @@ fun HomeScreen(navigator: DestinationsNavigator) {
|
|||||||
WindowInsetsSides.Top + WindowInsetsSides.Horizontal
|
WindowInsetsSides.Top + WindowInsetsSides.Horizontal
|
||||||
)
|
)
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
Column(
|
val pullRefreshState = rememberPullRefreshState(
|
||||||
|
refreshing = false,
|
||||||
|
onRefresh = {
|
||||||
|
coroutineScope.launch {
|
||||||
|
viewModel.refreshAllData(context)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(innerPadding)
|
.padding(innerPadding)
|
||||||
.disableOverscroll()
|
.fillMaxSize()
|
||||||
.nestedScroll(scrollBehavior.nestedScrollConnection)
|
.pullRefresh(pullRefreshState)
|
||||||
.verticalScroll(scrollState)
|
|
||||||
.padding(top = 12.dp)
|
|
||||||
.padding(horizontal = 16.dp),
|
|
||||||
verticalArrangement = Arrangement.spacedBy(12.dp)
|
|
||||||
) {
|
) {
|
||||||
val isManager = Natives.becomeManager(ksuApp.packageName)
|
Column(
|
||||||
val ksuVersion = if (isManager) Natives.version else null
|
modifier = Modifier
|
||||||
val lkmMode = ksuVersion?.let {
|
.fillMaxSize()
|
||||||
if (it >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && kernelVersion.isGKI()) Natives.isLkmMode else null
|
.verticalScroll(scrollState)
|
||||||
}
|
.padding(top = 12.dp, start = 16.dp, end = 16.dp),
|
||||||
|
verticalArrangement = Arrangement.spacedBy(12.dp)
|
||||||
|
) {
|
||||||
|
StatusCard(
|
||||||
|
systemStatus = viewModel.systemStatus,
|
||||||
|
onClickInstall = {
|
||||||
|
navigator.navigate(InstallScreenDestination)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
StatusCard(kernelVersion, ksuVersion, lkmMode) {
|
if (viewModel.systemStatus.requireNewKernel) {
|
||||||
navigator.navigate(InstallScreenDestination)
|
WarningCard(
|
||||||
}
|
stringResource(id = R.string.require_kernel_version).format(
|
||||||
|
viewModel.systemStatus.ksuVersion,
|
||||||
if (isManager && Natives.requireNewKernel()) {
|
Natives.MINIMAL_SUPPORTED_KERNEL
|
||||||
WarningCard(
|
)
|
||||||
stringResource(id = R.string.require_kernel_version).format(
|
|
||||||
ksuVersion, Natives.MINIMAL_SUPPORTED_KERNEL
|
|
||||||
)
|
)
|
||||||
)
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (ksuVersion != null && !rootAvailable()) {
|
if (viewModel.systemStatus.ksuVersion != null && !viewModel.systemStatus.isRootAvailable) {
|
||||||
WarningCard(
|
WarningCard(
|
||||||
stringResource(id = R.string.grant_root_failed)
|
stringResource(id = R.string.grant_root_failed)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val checkUpdate =
|
val checkUpdate = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("check_update", true)
|
.getBoolean("check_update", true)
|
||||||
if (checkUpdate) {
|
if (checkUpdate) {
|
||||||
UpdateCard()
|
UpdateCard()
|
||||||
}
|
}
|
||||||
|
|
||||||
val prefs = remember { context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE) }
|
InfoCard(
|
||||||
var clickCount by rememberSaveable { mutableIntStateOf(prefs.getInt("click_count", 0)) }
|
systemInfo = viewModel.systemInfo,
|
||||||
|
isSimpleMode = viewModel.isSimpleMode,
|
||||||
|
isHideVersion = viewModel.isHideVersion,
|
||||||
|
isHideOtherInfo = viewModel.isHideOtherInfo,
|
||||||
|
isHideSusfsStatus = viewModel.isHideSusfsStatus,
|
||||||
|
showKpmInfo = viewModel.showKpmInfo,
|
||||||
|
lkmMode = viewModel.systemStatus.lkmMode,
|
||||||
|
)
|
||||||
|
|
||||||
if (!isSimpleMode && clickCount < 3) {
|
if (!viewModel.isSimpleMode) {
|
||||||
AnimatedVisibility(
|
if (!viewModel.isHideLinkCard) {
|
||||||
visible = clickCount < 3,
|
ContributionCard()
|
||||||
enter = fadeIn() + expandVertically(),
|
DonateCard()
|
||||||
exit = shrinkVertically() + fadeOut()
|
LearnMoreCard()
|
||||||
) {
|
|
||||||
ElevatedCard(
|
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.secondaryContainer),
|
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
|
||||||
modifier = Modifier
|
|
||||||
.clip(MaterialTheme.shapes.medium)
|
|
||||||
.shadow(
|
|
||||||
elevation = cardElevation,
|
|
||||||
shape = MaterialTheme.shapes.medium,
|
|
||||||
spotColor = MaterialTheme.colorScheme.primary.copy(alpha = 0.1f)
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Row(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.clickable {
|
|
||||||
clickCount++
|
|
||||||
prefs.edit { putInt("click_count", clickCount) }
|
|
||||||
}
|
|
||||||
.padding(16.dp),
|
|
||||||
verticalAlignment = Alignment.CenterVertically
|
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Outlined.Info,
|
|
||||||
contentDescription = null,
|
|
||||||
modifier = Modifier.padding(end = 12.dp)
|
|
||||||
)
|
|
||||||
Text(
|
|
||||||
text = stringResource(R.string.using_mksu_manager),
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Spacer(Modifier.height(16.dp))
|
||||||
}
|
}
|
||||||
|
|
||||||
InfoCard()
|
|
||||||
|
|
||||||
if (!isSimpleMode) {
|
|
||||||
if (!isHideLinkCard) {
|
|
||||||
ContributionCard()
|
|
||||||
DonateCard()
|
|
||||||
LearnMoreCard()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Spacer(Modifier.height(16.dp))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(scrollState) {
|
|
||||||
snapshotFlow { scrollState.isScrollInProgress }
|
|
||||||
.debounce(debounceTime)
|
|
||||||
.collect { isScrolling ->
|
|
||||||
if (isScrolling) {
|
|
||||||
val currentTime = System.currentTimeMillis()
|
|
||||||
if (currentTime - lastScrollTime > debounceTime) {
|
|
||||||
lastScrollTime = currentTime
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -319,7 +257,7 @@ fun UpdateCard() {
|
|||||||
val updateDialog = rememberConfirmDialog(onConfirm = { uriHandler.openUri(newVersionUrl) })
|
val updateDialog = rememberConfirmDialog(onConfirm = { uriHandler.openUri(newVersionUrl) })
|
||||||
WarningCard(
|
WarningCard(
|
||||||
message = stringResource(id = R.string.new_version_available).format(newVersionCode),
|
message = stringResource(id = R.string.new_version_available).format(newVersionCode),
|
||||||
color = MaterialTheme.colorScheme.tertiaryContainer,
|
color = MaterialTheme.colorScheme.surfaceVariant,
|
||||||
onClick = {
|
onClick = {
|
||||||
if (changelog.isEmpty()) {
|
if (changelog.isEmpty()) {
|
||||||
uriHandler.openUri(newVersionUrl)
|
uriHandler.openUri(newVersionUrl)
|
||||||
@@ -357,7 +295,7 @@ private fun TopBar(
|
|||||||
onInstallClick: () -> Unit,
|
onInstallClick: () -> Unit,
|
||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
) {
|
) {
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = CardConfig.cardAlpha
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
@@ -372,15 +310,6 @@ private fun TopBar(
|
|||||||
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
|
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
actions = {
|
actions = {
|
||||||
if (rootAvailable() || kernelVersion.isGKI()) {
|
|
||||||
IconButton(onClick = onInstallClick) {
|
|
||||||
Icon(
|
|
||||||
Icons.Filled.Archive,
|
|
||||||
contentDescription = stringResource(R.string.install),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var showDropdown by remember { mutableStateOf(false) }
|
var showDropdown by remember { mutableStateOf(false) }
|
||||||
KsuIsValid {
|
KsuIsValid {
|
||||||
IconButton(onClick = {
|
IconButton(onClick = {
|
||||||
@@ -416,13 +345,11 @@ private fun TopBar(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun StatusCard(
|
private fun StatusCard(
|
||||||
kernelVersion: KernelVersion,
|
systemStatus: HomeViewModel.SystemStatus,
|
||||||
ksuVersion: Int?,
|
|
||||||
lkmMode: Boolean?,
|
|
||||||
onClickInstall: () -> Unit = {}
|
onClickInstall: () -> Unit = {}
|
||||||
) {
|
) {
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceVariant),
|
colors = getCardColors(MaterialTheme.colorScheme.secondaryContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -437,7 +364,7 @@ private fun StatusCard(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.clickable {
|
.clickable {
|
||||||
if (rootAvailable() || kernelVersion.isGKI()) {
|
if (systemStatus.isRootAvailable || systemStatus.kernelVersion.isGKI()) {
|
||||||
onClickInstall()
|
onClickInstall()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -445,50 +372,85 @@ private fun StatusCard(
|
|||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
when {
|
when {
|
||||||
ksuVersion != null -> {
|
systemStatus.ksuVersion != null -> {
|
||||||
val safeMode = when {
|
|
||||||
Natives.isSafeMode -> " [${stringResource(id = R.string.safe_mode)}]"
|
val workingModeText = when {
|
||||||
else -> ""
|
systemStatus.lkmMode == true -> "LKM"
|
||||||
|
systemStatus.lkmMode == null && systemStatus.kernelVersion.isGKI1() -> "GKI-1.0"
|
||||||
|
systemStatus.lkmMode == false || systemStatus.kernelVersion.isGKI() -> "GKI-2.0"
|
||||||
|
else -> "N-GKI"
|
||||||
}
|
}
|
||||||
|
|
||||||
val workingMode = when (lkmMode) {
|
|
||||||
null -> " <Non-GKI>"
|
|
||||||
true -> " <LKM>"
|
|
||||||
else -> " <GKI>"
|
|
||||||
}
|
|
||||||
|
|
||||||
val workingText = "${stringResource(id = R.string.home_working)}$workingMode$safeMode"
|
|
||||||
|
|
||||||
val isHideVersion = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_version", false)
|
|
||||||
|
|
||||||
val isHideOtherInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_other_info", false)
|
|
||||||
|
|
||||||
val isHideSusfsStatus = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_susfs_status", false)
|
|
||||||
|
|
||||||
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("show_kpm_info", true)
|
|
||||||
|
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Outlined.CheckCircle,
|
Icons.Outlined.TaskAlt,
|
||||||
contentDescription = stringResource(R.string.home_working),
|
contentDescription = stringResource(R.string.home_working),
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
tint = MaterialTheme.colorScheme.primary,
|
||||||
modifier = Modifier.size(24.dp)
|
modifier = Modifier.size(24.dp)
|
||||||
)
|
)
|
||||||
|
|
||||||
Column(Modifier.padding(start = 20.dp)) {
|
Column(Modifier.padding(start = 20.dp)) {
|
||||||
Text(
|
Row(
|
||||||
text = workingText,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
style = MaterialTheme.typography.titleMedium,
|
modifier = Modifier.fillMaxWidth()
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
) {
|
||||||
)
|
Text(
|
||||||
|
text = stringResource(id = R.string.home_working),
|
||||||
|
style = MaterialTheme.typography.titleMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onSurface
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(Modifier.width(8.dp))
|
||||||
|
|
||||||
|
// 工作模式标签
|
||||||
|
Surface(
|
||||||
|
shape = RoundedCornerShape(4.dp),
|
||||||
|
color = MaterialTheme.colorScheme.primary,
|
||||||
|
modifier = Modifier
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = workingModeText,
|
||||||
|
style = MaterialTheme.typography.labelMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onSecondary,
|
||||||
|
modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(Modifier.width(6.dp))
|
||||||
|
|
||||||
|
// 机器架构标签或者安全模式标签
|
||||||
|
val labelText = if (Natives.isSafeMode) {
|
||||||
|
stringResource(id = R.string.safe_mode)
|
||||||
|
} else {
|
||||||
|
Os.uname().machine
|
||||||
|
}
|
||||||
|
|
||||||
|
Surface(
|
||||||
|
shape = RoundedCornerShape(4.dp),
|
||||||
|
color = MaterialTheme.colorScheme.primary,
|
||||||
|
modifier = Modifier
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = labelText,
|
||||||
|
style = MaterialTheme.typography.labelMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onSecondary,
|
||||||
|
modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val isHideVersion = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
.getBoolean("is_hide_version", false)
|
||||||
|
|
||||||
|
val isHideOtherInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
.getBoolean("is_hide_other_info", false)
|
||||||
|
|
||||||
|
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
.getBoolean("show_kpm_info", true)
|
||||||
|
|
||||||
if (!isHideVersion) {
|
if (!isHideVersion) {
|
||||||
Spacer(Modifier.height(4.dp))
|
Spacer(Modifier.height(4.dp))
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.home_working_version, ksuVersion),
|
text = stringResource(R.string.home_working_version, systemStatus.ksuVersion),
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
)
|
)
|
||||||
@@ -510,7 +472,7 @@ private fun StatusCard(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val kpmVersion = getKpmVersion()
|
val kpmVersion = getKpmVersion()
|
||||||
if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo) {
|
if (kpmVersion.isNotEmpty() && !kpmVersion.startsWith("Error") && showKpmInfo && Natives.version >= Natives.MINIMAL_SUPPORTED_KPM) {
|
||||||
Spacer(Modifier.height(4.dp))
|
Spacer(Modifier.height(4.dp))
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.home_kpm_module, getKpmModuleCount()),
|
text = stringResource(R.string.home_kpm_module, getKpmModuleCount()),
|
||||||
@@ -519,29 +481,10 @@ private fun StatusCard(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isHideSusfsStatus) {
|
|
||||||
Spacer(modifier = Modifier.height(4.dp))
|
|
||||||
|
|
||||||
val suSFS = getSuSFS()
|
|
||||||
if (lkmMode != true) {
|
|
||||||
val translatedStatus = when (suSFS) {
|
|
||||||
"Supported" -> stringResource(R.string.status_supported)
|
|
||||||
"Not Supported" -> stringResource(R.string.status_not_supported)
|
|
||||||
else -> stringResource(R.string.status_unknown)
|
|
||||||
}
|
|
||||||
|
|
||||||
Text(
|
|
||||||
text = stringResource(R.string.home_susfs, translatedStatus),
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
kernelVersion.isGKI() -> {
|
systemStatus.kernelVersion.isGKI() -> {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Outlined.Warning,
|
Icons.Outlined.Warning,
|
||||||
contentDescription = stringResource(R.string.home_not_installed),
|
contentDescription = stringResource(R.string.home_not_installed),
|
||||||
@@ -596,7 +539,7 @@ private fun StatusCard(
|
|||||||
@Composable
|
@Composable
|
||||||
fun WarningCard(
|
fun WarningCard(
|
||||||
message: String,
|
message: String,
|
||||||
color: Color = MaterialTheme.colorScheme.errorContainer,
|
color: Color = MaterialTheme.colorScheme.error,
|
||||||
onClick: (() -> Unit)? = null
|
onClick: (() -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
@@ -608,7 +551,6 @@ fun WarningCard(
|
|||||||
.shadow(
|
.shadow(
|
||||||
elevation = cardElevation,
|
elevation = cardElevation,
|
||||||
shape = MaterialTheme.shapes.large,
|
shape = MaterialTheme.shapes.large,
|
||||||
spotColor = MaterialTheme.colorScheme.error.copy(alpha = 0.1f)
|
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
Row(
|
Row(
|
||||||
@@ -618,14 +560,6 @@ fun WarningCard(
|
|||||||
.padding(24.dp),
|
.padding(24.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Filled.Warning,
|
|
||||||
contentDescription = null,
|
|
||||||
tint = MaterialTheme.colorScheme.onErrorContainer,
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(end = 16.dp)
|
|
||||||
.size(28.dp)
|
|
||||||
)
|
|
||||||
Text(
|
Text(
|
||||||
text = message,
|
text = message,
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
@@ -641,7 +575,7 @@ fun ContributionCard() {
|
|||||||
val links = listOf("https://github.com/ShirkNeko", "https://github.com/udochina")
|
val links = listOf("https://github.com/ShirkNeko", "https://github.com/udochina")
|
||||||
|
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHigh),
|
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -687,7 +621,7 @@ fun LearnMoreCard() {
|
|||||||
val url = stringResource(R.string.home_learn_kernelsu_url)
|
val url = stringResource(R.string.home_learn_kernelsu_url)
|
||||||
|
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHigh),
|
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -730,7 +664,7 @@ fun DonateCard() {
|
|||||||
val uriHandler = LocalUriHandler.current
|
val uriHandler = LocalUriHandler.current
|
||||||
|
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHigh),
|
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -769,16 +703,17 @@ fun DonateCard() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun InfoCard() {
|
private fun InfoCard(
|
||||||
val lkmMode = Natives.isLkmMode
|
systemInfo: HomeViewModel.SystemInfo,
|
||||||
val context = LocalContext.current
|
isSimpleMode: Boolean,
|
||||||
val isSimpleMode = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
isHideVersion: Boolean,
|
||||||
.getBoolean("is_simple_mode", false)
|
isHideOtherInfo: Boolean,
|
||||||
val showKpmInfo = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
isHideSusfsStatus: Boolean,
|
||||||
.getBoolean("show_kpm_info", true)
|
showKpmInfo: Boolean,
|
||||||
|
lkmMode: Boolean?
|
||||||
|
) {
|
||||||
ElevatedCard(
|
ElevatedCard(
|
||||||
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainerHighest),
|
colors = getCardColors(MaterialTheme.colorScheme.surfaceContainer),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation),
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -793,17 +728,13 @@ private fun InfoCard() {
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(start = 24.dp, top = 24.dp, end = 24.dp, bottom = 16.dp),
|
.padding(start = 24.dp, top = 24.dp, end = 24.dp, bottom = 16.dp),
|
||||||
) withContext@{
|
) {
|
||||||
val contents = StringBuilder()
|
|
||||||
val uname = Os.uname()
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun InfoCardItem(
|
fun InfoCardItem(
|
||||||
label: String,
|
label: String,
|
||||||
content: String,
|
content: String,
|
||||||
icon: ImageVector = Icons.Default.Info
|
icon: ImageVector = Icons.Default.Info
|
||||||
) {
|
) {
|
||||||
contents.appendLine(label).appendLine(content).appendLine()
|
|
||||||
Row(
|
Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
@@ -839,82 +770,70 @@ private fun InfoCard() {
|
|||||||
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_kernel),
|
stringResource(R.string.home_kernel),
|
||||||
"${uname.release} (${uname.machine})",
|
systemInfo.kernelRelease,
|
||||||
icon = Icons.Default.Memory,
|
icon = Icons.Default.Memory,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!isSimpleMode) {
|
if (!isSimpleMode) {
|
||||||
val androidVersion = Build.VERSION.RELEASE
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_android_version),
|
stringResource(R.string.home_android_version),
|
||||||
androidVersion,
|
systemInfo.androidVersion,
|
||||||
icon = Icons.Default.Android,
|
icon = Icons.Default.Android,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val deviceModel = getDeviceModel()
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_device_model),
|
stringResource(R.string.home_device_model),
|
||||||
deviceModel,
|
systemInfo.deviceModel,
|
||||||
icon = Icons.Default.PhoneAndroid,
|
icon = Icons.Default.PhoneAndroid,
|
||||||
)
|
)
|
||||||
|
|
||||||
val managerVersion = getManagerVersion(context)
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_manager_version),
|
stringResource(R.string.home_manager_version),
|
||||||
"${managerVersion.first} (${managerVersion.second})",
|
"${systemInfo.managerVersion.first} (${systemInfo.managerVersion.second.toInt()})",
|
||||||
icon = Icons.Default.Settings,
|
icon = Icons.Default.SettingsSuggest,
|
||||||
)
|
)
|
||||||
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_selinux_status),
|
stringResource(R.string.home_selinux_status),
|
||||||
getSELinuxStatus(),
|
systemInfo.seLinuxStatus,
|
||||||
icon = Icons.Default.Security,
|
icon = Icons.Default.Security,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!isSimpleMode) {
|
if (!isSimpleMode) {
|
||||||
if (lkmMode != true) {
|
if (lkmMode != true) {
|
||||||
val kpmVersion = getKpmVersion()
|
|
||||||
val isKpmConfigured = checkKpmConfigured()
|
|
||||||
|
|
||||||
// 根据showKpmInfo决定是否显示KPM信息
|
// 根据showKpmInfo决定是否显示KPM信息
|
||||||
if (showKpmInfo) {
|
if (showKpmInfo && Natives.version >= Natives.MINIMAL_SUPPORTED_KPM) {
|
||||||
val displayVersion = if (kpmVersion.isEmpty() || kpmVersion.startsWith("Error")) {
|
val displayVersion = if (systemInfo.kpmVersion.isEmpty() || systemInfo.kpmVersion.startsWith("Error")) {
|
||||||
val statusText = if (isKpmConfigured) {
|
val statusText = if (Natives.isKPMEnabled()) {
|
||||||
stringResource(R.string.kernel_patched)
|
stringResource(R.string.kernel_patched)
|
||||||
} else {
|
} else {
|
||||||
stringResource(R.string.kernel_not_enabled)
|
stringResource(R.string.kernel_not_enabled)
|
||||||
}
|
}
|
||||||
"${stringResource(R.string.not_supported)} ($statusText)"
|
"${stringResource(R.string.not_supported)} ($statusText)"
|
||||||
} else {
|
} else {
|
||||||
"${stringResource(R.string.supported)} ($kpmVersion)"
|
"${stringResource(R.string.supported)} (${systemInfo.kpmVersion})"
|
||||||
}
|
}
|
||||||
|
|
||||||
InfoCardItem(
|
InfoCardItem(
|
||||||
stringResource(R.string.home_kpm_version),
|
stringResource(R.string.home_kpm_version),
|
||||||
displayVersion,
|
displayVersion,
|
||||||
icon = Icons.Default.Code
|
icon = Icons.Default.Archive
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val isHideSusfsStatus = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
|
||||||
.getBoolean("is_hide_susfs_status", false)
|
|
||||||
|
|
||||||
if ((!isSimpleMode) && (!isHideSusfsStatus)) {
|
if ((!isSimpleMode) && (!isHideSusfsStatus)) {
|
||||||
val suSFS = getSuSFS()
|
if (systemInfo.suSFSStatus == "Supported") {
|
||||||
if (suSFS == "Supported") {
|
if (systemInfo.suSFSVersion.isNotEmpty()) {
|
||||||
val suSFSVersion = getSuSFSVersion()
|
val isSUS_SU = systemInfo.suSFSFeatures == "CONFIG_KSU_SUSFS_SUS_SU"
|
||||||
if (suSFSVersion.isNotEmpty()) {
|
|
||||||
val isSUS_SU = getSuSFSFeatures() == "CONFIG_KSU_SUSFS_SUS_SU"
|
|
||||||
val infoText = buildString {
|
val infoText = buildString {
|
||||||
append(suSFSVersion)
|
append(systemInfo.suSFSVersion)
|
||||||
append(if (isSUS_SU) " (${getSuSFSVariant()})" else " (${stringResource(R.string.manual_hook)})")
|
append(if (isSUS_SU) " (${systemInfo.suSFSVariant})" else " (${stringResource(R.string.manual_hook)})")
|
||||||
if (isSUS_SU) {
|
if (isSUS_SU) {
|
||||||
val susSUMode = try { susfsSUS_SU_Mode().toString() } catch (_: Exception) { "" }
|
if (systemInfo.susSUMode.isNotEmpty()) {
|
||||||
if (susSUMode.isNotEmpty()) {
|
append(" ${stringResource(R.string.sus_su_mode)} ${systemInfo.susSUMode}")
|
||||||
append(" ${stringResource(R.string.sus_su_mode)} $susSUMode")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -941,10 +860,45 @@ fun getManagerVersion(context: Context): Pair<String, Long> {
|
|||||||
@Composable
|
@Composable
|
||||||
private fun StatusCardPreview() {
|
private fun StatusCardPreview() {
|
||||||
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||||
StatusCard(KernelVersion(5, 10, 101), 1, null)
|
StatusCard(
|
||||||
StatusCard(KernelVersion(5, 10, 101), 20000, true)
|
HomeViewModel.SystemStatus(
|
||||||
StatusCard(KernelVersion(5, 10, 101), null, true)
|
isManager = true,
|
||||||
StatusCard(KernelVersion(4, 10, 101), null, false)
|
ksuVersion = 1,
|
||||||
|
lkmMode = null,
|
||||||
|
kernelVersion = KernelVersion(5, 10, 101),
|
||||||
|
isRootAvailable = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
StatusCard(
|
||||||
|
HomeViewModel.SystemStatus(
|
||||||
|
isManager = true,
|
||||||
|
ksuVersion = 20000,
|
||||||
|
lkmMode = true,
|
||||||
|
kernelVersion = KernelVersion(5, 10, 101),
|
||||||
|
isRootAvailable = true
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
StatusCard(
|
||||||
|
HomeViewModel.SystemStatus(
|
||||||
|
isManager = false,
|
||||||
|
ksuVersion = null,
|
||||||
|
lkmMode = true,
|
||||||
|
kernelVersion = KernelVersion(5, 10, 101),
|
||||||
|
isRootAvailable = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
StatusCard(
|
||||||
|
HomeViewModel.SystemStatus(
|
||||||
|
isManager = false,
|
||||||
|
ksuVersion = null,
|
||||||
|
lkmMode = false,
|
||||||
|
kernelVersion = KernelVersion(4, 10, 101),
|
||||||
|
isRootAvailable = false
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -955,101 +909,11 @@ private fun WarningCardPreview() {
|
|||||||
WarningCard(message = "Warning message")
|
WarningCard(message = "Warning message")
|
||||||
WarningCard(
|
WarningCard(
|
||||||
message = "Warning message ",
|
message = "Warning message ",
|
||||||
MaterialTheme.colorScheme.tertiaryContainer,
|
MaterialTheme.colorScheme.outlineVariant,
|
||||||
onClick = {})
|
onClick = {})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private object DeviceModelCache {
|
|
||||||
@Volatile
|
|
||||||
private var cachedModel: String? = null
|
|
||||||
|
|
||||||
fun getDeviceModel(): String {
|
|
||||||
return cachedModel ?: synchronized(this) {
|
|
||||||
cachedModel ?: try {
|
|
||||||
val systemProperties = Class.forName("android.os.SystemProperties")
|
|
||||||
val getMethod = systemProperties.getMethod("get", String::class.java, String::class.java)
|
|
||||||
val marketNameKeys = listOf(
|
|
||||||
"ro.product.marketname", // Xiaomi
|
|
||||||
"ro.vendor.oplus.market.name", // Oppo, OnePlus, Realme
|
|
||||||
"ro.vivo.market.name", // Vivo
|
|
||||||
"ro.config.marketing_name" // Huawei
|
|
||||||
)
|
|
||||||
var result = Build.DEVICE
|
|
||||||
for (key in marketNameKeys) {
|
|
||||||
val marketName = getMethod.invoke(null, key, "") as String
|
|
||||||
if (marketName.isNotEmpty()) {
|
|
||||||
result = marketName
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result
|
|
||||||
} catch (_: Exception) {
|
|
||||||
Build.DEVICE
|
|
||||||
}.also { cachedModel = it }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private object KpmConfigCache {
|
|
||||||
private var isChecked = false
|
|
||||||
private var isConfigured = false
|
|
||||||
|
|
||||||
fun checkKpmConfigured(): Boolean {
|
|
||||||
if (isChecked) {
|
|
||||||
return isConfigured
|
|
||||||
}
|
|
||||||
|
|
||||||
isConfigured = performKpmCheck()
|
|
||||||
isChecked = true
|
|
||||||
return isConfigured
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun performKpmCheck(): Boolean {
|
|
||||||
try {
|
|
||||||
val process = Runtime.getRuntime().exec("su -c cat /proc/config.gz")
|
|
||||||
val inputStream = process.inputStream
|
|
||||||
val gzipInputStream = GZIPInputStream(inputStream)
|
|
||||||
val reader = BufferedReader(InputStreamReader(gzipInputStream))
|
|
||||||
|
|
||||||
var line: String?
|
|
||||||
while (reader.readLine().also { line = it } != null) {
|
|
||||||
if (line?.contains("CONFIG_KPM=y") == true) {
|
|
||||||
reader.close()
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
reader.close()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
val process = Runtime.getRuntime().exec("su -c grep sukisu_kpm /proc/kallsyms")
|
|
||||||
val reader = BufferedReader(InputStreamReader(process.inputStream))
|
|
||||||
if (reader.readLine() != null) {
|
|
||||||
reader.close()
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
reader.close()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取设备型号
|
|
||||||
@SuppressLint("PrivateApi")
|
|
||||||
private fun getDeviceModel(): String {
|
|
||||||
return DeviceModelCache.getDeviceModel()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查KPM是否存在
|
|
||||||
private fun checkKpmConfigured(): Boolean {
|
|
||||||
return KpmConfigCache.checkKpmConfigured()
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressLint("UnnecessaryComposedModifier")
|
@SuppressLint("UnnecessaryComposedModifier")
|
||||||
fun Modifier.disableOverscroll(): Modifier = composed {
|
fun Modifier.disableOverscroll(): Modifier = composed {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ import androidx.compose.material3.TopAppBarDefaults
|
|||||||
import androidx.compose.material3.TopAppBarScrollBehavior
|
import androidx.compose.material3.TopAppBarScrollBehavior
|
||||||
import androidx.compose.material3.rememberTopAppBarState
|
import androidx.compose.material3.rememberTopAppBarState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.produceState
|
import androidx.compose.runtime.produceState
|
||||||
@@ -75,12 +74,10 @@ import com.maxkeppeler.sheets.list.models.ListSelection
|
|||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootGraph
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
import com.ramcosta.composedestinations.generated.destinations.FlashScreenDestination
|
import com.ramcosta.composedestinations.generated.destinations.FlashScreenDestination
|
||||||
|
import com.ramcosta.composedestinations.generated.destinations.KernelFlashScreenDestination
|
||||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import com.sukisu.ultra.flash.HorizonKernelFlashProgress
|
|
||||||
import com.sukisu.ultra.flash.HorizonKernelState
|
|
||||||
import com.sukisu.ultra.flash.HorizonKernelWorker
|
|
||||||
import com.sukisu.ultra.ui.component.DialogHandle
|
import com.sukisu.ultra.ui.component.DialogHandle
|
||||||
import com.sukisu.ultra.ui.component.SlotSelectionDialog
|
import com.sukisu.ultra.ui.component.SlotSelectionDialog
|
||||||
import com.sukisu.ultra.ui.component.rememberConfirmDialog
|
import com.sukisu.ultra.ui.component.rememberConfirmDialog
|
||||||
@@ -97,8 +94,8 @@ import com.sukisu.ultra.ui.util.rootAvailable
|
|||||||
import com.sukisu.ultra.getKernelVersion
|
import com.sukisu.ultra.getKernelVersion
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author weishu
|
* @author ShirkNeko
|
||||||
* @date 2024/3/12.
|
* @date 2025/5/31.
|
||||||
*/
|
*/
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Destination<RootGraph>
|
@Destination<RootGraph>
|
||||||
@@ -110,16 +107,10 @@ fun InstallScreen(navigator: DestinationsNavigator) {
|
|||||||
var showRebootDialog by remember { mutableStateOf(false) }
|
var showRebootDialog by remember { mutableStateOf(false) }
|
||||||
var showSlotSelectionDialog by remember { mutableStateOf(false) }
|
var showSlotSelectionDialog by remember { mutableStateOf(false) }
|
||||||
var tempKernelUri by remember { mutableStateOf<Uri?>(null) }
|
var tempKernelUri by remember { mutableStateOf<Uri?>(null) }
|
||||||
val horizonKernelState = remember { HorizonKernelState() }
|
|
||||||
val flashState by horizonKernelState.state.collectAsState()
|
|
||||||
val summary = stringResource(R.string.horizon_kernel_summary)
|
|
||||||
val kernelVersion = getKernelVersion()
|
val kernelVersion = getKernelVersion()
|
||||||
val isGKI = kernelVersion.isGKI()
|
val isGKI = kernelVersion.isGKI()
|
||||||
val isAbDevice = isAbDevice()
|
val isAbDevice = isAbDevice()
|
||||||
|
val summary = stringResource(R.string.horizon_kernel_summary)
|
||||||
val onFlashComplete = {
|
|
||||||
showRebootDialog = true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (showRebootDialog) {
|
if (showRebootDialog) {
|
||||||
RebootDialog(
|
RebootDialog(
|
||||||
@@ -145,14 +136,12 @@ fun InstallScreen(navigator: DestinationsNavigator) {
|
|||||||
when (method) {
|
when (method) {
|
||||||
is InstallMethod.HorizonKernel -> {
|
is InstallMethod.HorizonKernel -> {
|
||||||
method.uri?.let { uri ->
|
method.uri?.let { uri ->
|
||||||
val worker = HorizonKernelWorker(
|
navigator.navigate(
|
||||||
context = context,
|
KernelFlashScreenDestination(
|
||||||
state = horizonKernelState,
|
kernelUri = uri,
|
||||||
slot = method.slot
|
selectedSlot = method.slot
|
||||||
|
)
|
||||||
)
|
)
|
||||||
worker.uri = uri
|
|
||||||
worker.setOnFlashCompleteListener(onFlashComplete)
|
|
||||||
worker.start()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
@@ -253,18 +242,9 @@ fun InstallScreen(navigator: DestinationsNavigator) {
|
|||||||
} else {
|
} else {
|
||||||
installMethod = method
|
installMethod = method
|
||||||
}
|
}
|
||||||
horizonKernelState.reset()
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
AnimatedVisibility(
|
|
||||||
visible = flashState.isFlashing && installMethod is InstallMethod.HorizonKernel,
|
|
||||||
enter = fadeIn() + expandVertically(),
|
|
||||||
exit = fadeOut() + shrinkVertically()
|
|
||||||
) {
|
|
||||||
HorizonKernelFlashProgress(flashState)
|
|
||||||
}
|
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
@@ -325,7 +305,7 @@ fun InstallScreen(navigator: DestinationsNavigator) {
|
|||||||
|
|
||||||
Button(
|
Button(
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
enabled = installMethod != null && !flashState.isFlashing,
|
enabled = installMethod != null,
|
||||||
onClick = onClickNext,
|
onClick = onClickNext,
|
||||||
shape = MaterialTheme.shapes.medium,
|
shape = MaterialTheme.shapes.medium,
|
||||||
colors = ButtonDefaults.buttonColors(
|
colors = ButtonDefaults.buttonColors(
|
||||||
@@ -647,60 +627,60 @@ private fun SelectInstallMethod(
|
|||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
radioOptions.filterIsInstance<InstallMethod.HorizonKernel>().forEach { option ->
|
radioOptions.filterIsInstance<InstallMethod.HorizonKernel>().forEach { option ->
|
||||||
val interactionSource = remember { MutableInteractionSource() }
|
val interactionSource = remember { MutableInteractionSource() }
|
||||||
Surface(
|
Surface(
|
||||||
color = if (option.javaClass == selectedOption?.javaClass)
|
color = if (option.javaClass == selectedOption?.javaClass)
|
||||||
MaterialTheme.colorScheme.secondaryContainer.copy(alpha = cardAlpha)
|
MaterialTheme.colorScheme.secondaryContainer.copy(alpha = cardAlpha)
|
||||||
else
|
else
|
||||||
MaterialTheme.colorScheme.surfaceContainerHighest.copy(alpha = cardAlpha),
|
MaterialTheme.colorScheme.surfaceContainerHighest.copy(alpha = cardAlpha),
|
||||||
shape = MaterialTheme.shapes.medium,
|
shape = MaterialTheme.shapes.medium,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(vertical = 4.dp)
|
||||||
|
.clip(MaterialTheme.shapes.medium)
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(vertical = 4.dp)
|
.toggleable(
|
||||||
.clip(MaterialTheme.shapes.medium)
|
value = option.javaClass == selectedOption?.javaClass,
|
||||||
) {
|
onValueChange = { onClick(option) },
|
||||||
Row(
|
role = Role.RadioButton,
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
indication = LocalIndication.current,
|
||||||
modifier = Modifier
|
interactionSource = interactionSource
|
||||||
.fillMaxWidth()
|
|
||||||
.toggleable(
|
|
||||||
value = option.javaClass == selectedOption?.javaClass,
|
|
||||||
onValueChange = { onClick(option) },
|
|
||||||
role = Role.RadioButton,
|
|
||||||
indication = LocalIndication.current,
|
|
||||||
interactionSource = interactionSource
|
|
||||||
)
|
|
||||||
.padding(vertical = 8.dp, horizontal = 12.dp)
|
|
||||||
) {
|
|
||||||
RadioButton(
|
|
||||||
selected = option.javaClass == selectedOption?.javaClass,
|
|
||||||
onClick = null,
|
|
||||||
interactionSource = interactionSource,
|
|
||||||
colors = RadioButtonDefaults.colors(
|
|
||||||
selectedColor = MaterialTheme.colorScheme.primary,
|
|
||||||
unselectedColor = MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
Column(
|
.padding(vertical = 8.dp, horizontal = 12.dp)
|
||||||
modifier = Modifier
|
) {
|
||||||
.padding(start = 10.dp)
|
RadioButton(
|
||||||
.weight(1f)
|
selected = option.javaClass == selectedOption?.javaClass,
|
||||||
) {
|
onClick = null,
|
||||||
|
interactionSource = interactionSource,
|
||||||
|
colors = RadioButtonDefaults.colors(
|
||||||
|
selectedColor = MaterialTheme.colorScheme.primary,
|
||||||
|
unselectedColor = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
|
)
|
||||||
|
)
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.padding(start = 10.dp)
|
||||||
|
.weight(1f)
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = stringResource(id = option.label),
|
||||||
|
style = MaterialTheme.typography.bodyLarge
|
||||||
|
)
|
||||||
|
option.summary?.let {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(id = option.label),
|
text = it,
|
||||||
style = MaterialTheme.typography.bodyLarge
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
)
|
)
|
||||||
option.summary?.let {
|
|
||||||
Text(
|
|
||||||
text = it,
|
|
||||||
style = MaterialTheme.typography.bodySmall,
|
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -752,7 +732,7 @@ private fun TopBar(
|
|||||||
onLkmUpload: () -> Unit = {},
|
onLkmUpload: () -> Unit = {},
|
||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
) {
|
) {
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = cardAlpha
|
val cardAlpha = cardAlpha
|
||||||
|
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
|
|||||||
@@ -0,0 +1,411 @@
|
|||||||
|
package com.sukisu.ultra.ui.screen
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Environment
|
||||||
|
import androidx.activity.compose.BackHandler
|
||||||
|
import androidx.compose.animation.core.animateFloatAsState
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.foundation.rememberScrollState
|
||||||
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||||
|
import androidx.compose.material.icons.filled.CheckCircle
|
||||||
|
import androidx.compose.material.icons.filled.Error
|
||||||
|
import androidx.compose.material.icons.filled.Refresh
|
||||||
|
import androidx.compose.material.icons.filled.Save
|
||||||
|
import androidx.compose.material3.*
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
|
import com.sukisu.ultra.R
|
||||||
|
import com.sukisu.ultra.flash.HorizonKernelState
|
||||||
|
import com.sukisu.ultra.flash.HorizonKernelWorker
|
||||||
|
import com.sukisu.ultra.ui.component.KeyEventBlocker
|
||||||
|
import com.sukisu.ultra.ui.util.*
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import java.io.File
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
|
import java.util.*
|
||||||
|
import androidx.compose.ui.input.key.Key
|
||||||
|
import androidx.compose.ui.input.key.key
|
||||||
|
import com.sukisu.ultra.ui.theme.CardConfig
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
|
private object KernelFlashStateHolder {
|
||||||
|
var currentState: HorizonKernelState? = null
|
||||||
|
var currentUri: Uri? = null
|
||||||
|
var currentSlot: String? = null
|
||||||
|
var isFlashing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kernel刷写界面
|
||||||
|
*/
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Destination<RootGraph>
|
||||||
|
@Composable
|
||||||
|
fun KernelFlashScreen(
|
||||||
|
navigator: DestinationsNavigator,
|
||||||
|
kernelUri: Uri,
|
||||||
|
selectedSlot: String? = null
|
||||||
|
) {
|
||||||
|
val context = LocalContext.current
|
||||||
|
val scrollState = rememberScrollState()
|
||||||
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||||
|
val snackBarHost = LocalSnackbarHost.current
|
||||||
|
val scope = rememberCoroutineScope()
|
||||||
|
var logText by rememberSaveable { mutableStateOf("") }
|
||||||
|
var showFloatAction by rememberSaveable { mutableStateOf(false) }
|
||||||
|
val logContent = rememberSaveable { StringBuilder() }
|
||||||
|
val horizonKernelState = remember {
|
||||||
|
if (KernelFlashStateHolder.currentState != null &&
|
||||||
|
KernelFlashStateHolder.currentUri == kernelUri &&
|
||||||
|
KernelFlashStateHolder.currentSlot == selectedSlot) {
|
||||||
|
KernelFlashStateHolder.currentState!!
|
||||||
|
} else {
|
||||||
|
HorizonKernelState().also {
|
||||||
|
KernelFlashStateHolder.currentState = it
|
||||||
|
KernelFlashStateHolder.currentUri = kernelUri
|
||||||
|
KernelFlashStateHolder.currentSlot = selectedSlot
|
||||||
|
KernelFlashStateHolder.isFlashing = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val flashState by horizonKernelState.state.collectAsState()
|
||||||
|
val logSavedString = stringResource(R.string.log_saved)
|
||||||
|
|
||||||
|
val onFlashComplete = {
|
||||||
|
showFloatAction = true
|
||||||
|
KernelFlashStateHolder.isFlashing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始刷写
|
||||||
|
LaunchedEffect(Unit) {
|
||||||
|
if (!KernelFlashStateHolder.isFlashing && !flashState.isCompleted && flashState.error.isEmpty()) {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
KernelFlashStateHolder.isFlashing = true
|
||||||
|
val worker = HorizonKernelWorker(
|
||||||
|
context = context,
|
||||||
|
state = horizonKernelState,
|
||||||
|
slot = selectedSlot
|
||||||
|
)
|
||||||
|
worker.uri = kernelUri
|
||||||
|
worker.setOnFlashCompleteListener(onFlashComplete)
|
||||||
|
worker.start()
|
||||||
|
|
||||||
|
// 监听日志更新
|
||||||
|
while (!flashState.isCompleted && flashState.error.isEmpty()) {
|
||||||
|
if (flashState.logs.isNotEmpty()) {
|
||||||
|
logText = flashState.logs.joinToString("\n")
|
||||||
|
logContent.clear()
|
||||||
|
logContent.append(logText)
|
||||||
|
}
|
||||||
|
kotlinx.coroutines.delay(100)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flashState.error.isNotEmpty()) {
|
||||||
|
logText += "\n${flashState.error}\n"
|
||||||
|
logContent.append("\n${flashState.error}\n")
|
||||||
|
KernelFlashStateHolder.isFlashing = false
|
||||||
|
} else if (flashState.isCompleted) {
|
||||||
|
logText += "\n${context.getString(R.string.horizon_flash_complete)}\n\n\n"
|
||||||
|
logContent.append("\n${context.getString(R.string.horizon_flash_complete)}\n\n\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logText = flashState.logs.joinToString("\n")
|
||||||
|
if (flashState.error.isNotEmpty()) {
|
||||||
|
logText += "\n${flashState.error}\n"
|
||||||
|
} else if (flashState.isCompleted) {
|
||||||
|
logText += "\n${context.getString(R.string.horizon_flash_complete)}\n\n\n"
|
||||||
|
showFloatAction = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val onBack: () -> Unit = {
|
||||||
|
if (!flashState.isFlashing || flashState.isCompleted || flashState.error.isNotEmpty()) {
|
||||||
|
// 清理全局状态
|
||||||
|
if (flashState.isCompleted || flashState.error.isNotEmpty()) {
|
||||||
|
KernelFlashStateHolder.currentState = null
|
||||||
|
KernelFlashStateHolder.currentUri = null
|
||||||
|
KernelFlashStateHolder.currentSlot = null
|
||||||
|
KernelFlashStateHolder.isFlashing = false
|
||||||
|
}
|
||||||
|
navigator.popBackStack()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BackHandler(enabled = true) {
|
||||||
|
onBack()
|
||||||
|
}
|
||||||
|
|
||||||
|
Scaffold(
|
||||||
|
topBar = {
|
||||||
|
TopBar(
|
||||||
|
flashState = flashState,
|
||||||
|
onBack = onBack,
|
||||||
|
onSave = {
|
||||||
|
scope.launch {
|
||||||
|
val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault())
|
||||||
|
val date = format.format(Date())
|
||||||
|
val file = File(
|
||||||
|
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
|
||||||
|
"KernelSU_kernel_flash_log_${date}.log"
|
||||||
|
)
|
||||||
|
file.writeText(logContent.toString())
|
||||||
|
snackBarHost.showSnackbar(logSavedString.format(file.absolutePath))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
scrollBehavior = scrollBehavior
|
||||||
|
)
|
||||||
|
},
|
||||||
|
floatingActionButton = {
|
||||||
|
if (showFloatAction) {
|
||||||
|
ExtendedFloatingActionButton(
|
||||||
|
onClick = {
|
||||||
|
scope.launch {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
reboot()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
icon = {
|
||||||
|
Icon(
|
||||||
|
Icons.Filled.Refresh,
|
||||||
|
contentDescription = stringResource(id = R.string.reboot)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
text = {
|
||||||
|
Text(text = stringResource(id = R.string.reboot))
|
||||||
|
},
|
||||||
|
containerColor = MaterialTheme.colorScheme.secondaryContainer,
|
||||||
|
contentColor = MaterialTheme.colorScheme.onSecondaryContainer,
|
||||||
|
expanded = true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
snackbarHost = { SnackbarHost(hostState = snackBarHost) },
|
||||||
|
contentWindowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
|
||||||
|
containerColor = MaterialTheme.colorScheme.background
|
||||||
|
) { innerPadding ->
|
||||||
|
KeyEventBlocker {
|
||||||
|
it.key == Key.VolumeDown || it.key == Key.VolumeUp
|
||||||
|
}
|
||||||
|
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(innerPadding)
|
||||||
|
.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
|
) {
|
||||||
|
FlashProgressIndicator(flashState)
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.weight(1f)
|
||||||
|
.verticalScroll(scrollState)
|
||||||
|
) {
|
||||||
|
LaunchedEffect(logText) {
|
||||||
|
scrollState.animateScrollTo(scrollState.maxValue)
|
||||||
|
}
|
||||||
|
Text(
|
||||||
|
modifier = Modifier.padding(16.dp),
|
||||||
|
text = logText,
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
fontFamily = FontFamily.Monospace,
|
||||||
|
color = MaterialTheme.colorScheme.onSurface
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun FlashProgressIndicator(flashState: com.sukisu.ultra.flash.FlashState) {
|
||||||
|
val progressColor = when {
|
||||||
|
flashState.error.isNotEmpty() -> MaterialTheme.colorScheme.error
|
||||||
|
flashState.isCompleted -> MaterialTheme.colorScheme.tertiary
|
||||||
|
else -> MaterialTheme.colorScheme.primary
|
||||||
|
}
|
||||||
|
|
||||||
|
val progress = animateFloatAsState(
|
||||||
|
targetValue = flashState.progress,
|
||||||
|
label = "FlashProgress"
|
||||||
|
)
|
||||||
|
|
||||||
|
Card(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(16.dp),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceVariant
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(16.dp)
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
horizontalArrangement = Arrangement.SpaceBetween
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = when {
|
||||||
|
flashState.error.isNotEmpty() -> stringResource(R.string.flash_failed)
|
||||||
|
flashState.isCompleted -> stringResource(R.string.flash_success)
|
||||||
|
else -> stringResource(R.string.flashing)
|
||||||
|
},
|
||||||
|
style = MaterialTheme.typography.titleMedium,
|
||||||
|
fontWeight = FontWeight.Bold,
|
||||||
|
color = progressColor
|
||||||
|
)
|
||||||
|
|
||||||
|
when {
|
||||||
|
flashState.error.isNotEmpty() -> {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Error,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
flashState.isCompleted -> {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.CheckCircle,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.tertiary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
if (flashState.currentStep.isNotEmpty()) {
|
||||||
|
Text(
|
||||||
|
text = flashState.currentStep,
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
}
|
||||||
|
|
||||||
|
LinearProgressIndicator(
|
||||||
|
progress = { progress.value },
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.height(8.dp),
|
||||||
|
color = progressColor,
|
||||||
|
trackColor = MaterialTheme.colorScheme.surfaceVariant
|
||||||
|
)
|
||||||
|
|
||||||
|
if (flashState.error.isNotEmpty()) {
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Error,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.error,
|
||||||
|
modifier = Modifier.size(16.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(4.dp))
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = flashState.error,
|
||||||
|
style = MaterialTheme.typography.bodySmall,
|
||||||
|
color = MaterialTheme.colorScheme.error,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(
|
||||||
|
MaterialTheme.colorScheme.errorContainer.copy(alpha = 0.3f),
|
||||||
|
shape = MaterialTheme.shapes.small
|
||||||
|
)
|
||||||
|
.padding(8.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Composable
|
||||||
|
private fun TopBar(
|
||||||
|
flashState: com.sukisu.ultra.flash.FlashState,
|
||||||
|
onBack: () -> Unit,
|
||||||
|
onSave: () -> Unit = {},
|
||||||
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
|
) {
|
||||||
|
val statusColor = when {
|
||||||
|
flashState.error.isNotEmpty() -> MaterialTheme.colorScheme.error
|
||||||
|
flashState.isCompleted -> MaterialTheme.colorScheme.tertiary
|
||||||
|
else -> MaterialTheme.colorScheme.primary
|
||||||
|
}
|
||||||
|
|
||||||
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
|
TopAppBar(
|
||||||
|
title = {
|
||||||
|
Text(
|
||||||
|
text = stringResource(
|
||||||
|
when {
|
||||||
|
flashState.error.isNotEmpty() -> R.string.flash_failed
|
||||||
|
flashState.isCompleted -> R.string.flash_success
|
||||||
|
else -> R.string.kernel_flashing
|
||||||
|
}
|
||||||
|
),
|
||||||
|
style = MaterialTheme.typography.titleLarge,
|
||||||
|
color = statusColor
|
||||||
|
)
|
||||||
|
},
|
||||||
|
navigationIcon = {
|
||||||
|
IconButton(onClick = onBack) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
|
||||||
|
contentDescription = null,
|
||||||
|
tint = MaterialTheme.colorScheme.onSurface
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
colors = TopAppBarDefaults.topAppBarColors(
|
||||||
|
containerColor = cardColor.copy(alpha = cardAlpha),
|
||||||
|
scrolledContainerColor = cardColor.copy(alpha = cardAlpha)
|
||||||
|
),
|
||||||
|
actions = {
|
||||||
|
IconButton(onClick = onSave) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Filled.Save,
|
||||||
|
contentDescription = stringResource(id = R.string.save_log),
|
||||||
|
tint = MaterialTheme.colorScheme.onSurfaceVariant
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
windowInsets = WindowInsets.safeDrawing.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal),
|
||||||
|
scrollBehavior = scrollBehavior
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import android.app.Activity.*
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.util.Log
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
@@ -64,18 +65,20 @@ import okhttp3.OkHttpClient
|
|||||||
import com.sukisu.ultra.ui.util.ModuleModify
|
import com.sukisu.ultra.ui.util.ModuleModify
|
||||||
import com.sukisu.ultra.ui.theme.getCardColors
|
import com.sukisu.ultra.ui.theme.getCardColors
|
||||||
import com.sukisu.ultra.ui.viewmodel.ModuleViewModel
|
import com.sukisu.ultra.ui.viewmodel.ModuleViewModel
|
||||||
import java.io.BufferedReader
|
|
||||||
import java.io.InputStreamReader
|
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import java.util.zip.ZipInputStream
|
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
||||||
import com.sukisu.ultra.ui.webui.WebUIXActivity
|
import com.sukisu.ultra.ui.webui.WebUIXActivity
|
||||||
import com.dergoogler.mmrl.platform.Platform
|
import com.dergoogler.mmrl.platform.Platform
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
import com.dergoogler.mmrl.platform.model.ModuleConfig
|
||||||
|
import com.dergoogler.mmrl.platform.model.ModuleConfig.Companion.asModuleConfig
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Destination<RootGraph>
|
@Destination<RootGraph>
|
||||||
@Composable
|
@Composable
|
||||||
@@ -85,6 +88,7 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
val snackBarHost = LocalSnackbarHost.current
|
val snackBarHost = LocalSnackbarHost.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val confirmDialog = rememberConfirmDialog()
|
val confirmDialog = rememberConfirmDialog()
|
||||||
|
var lastClickTime by remember { mutableStateOf(0L) }
|
||||||
|
|
||||||
val selectZipLauncher = rememberLauncherForActivityResult(
|
val selectZipLauncher = rememberLauncherForActivityResult(
|
||||||
contract = ActivityResultContracts.StartActivityForResult()
|
contract = ActivityResultContracts.StartActivityForResult()
|
||||||
@@ -97,38 +101,21 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
scope.launch {
|
scope.launch {
|
||||||
val clipData = data.clipData
|
val clipData = data.clipData
|
||||||
if (clipData != null) {
|
if (clipData != null) {
|
||||||
// 处理多选结果
|
|
||||||
val selectedModules = mutableListOf<Uri>()
|
val selectedModules = mutableListOf<Uri>()
|
||||||
val selectedModuleNames = mutableMapOf<Uri, String>()
|
val selectedModuleNames = mutableMapOf<Uri, String>()
|
||||||
|
|
||||||
suspend fun processUri(uri: Uri) {
|
fun processUri(uri: Uri) {
|
||||||
val moduleName = withContext(Dispatchers.IO) {
|
try {
|
||||||
try {
|
if (!ModuleUtils.isUriAccessible(context, uri)) {
|
||||||
val zipInputStream = ZipInputStream(context.contentResolver.openInputStream(uri))
|
return
|
||||||
var entry = zipInputStream.nextEntry
|
|
||||||
var name = context.getString(R.string.unknown_module)
|
|
||||||
|
|
||||||
while (entry != null) {
|
|
||||||
if (entry.name == "module.prop") {
|
|
||||||
val reader = BufferedReader(InputStreamReader(zipInputStream))
|
|
||||||
var line: String?
|
|
||||||
while (reader.readLine().also { line = it } != null) {
|
|
||||||
if (line?.startsWith("name=") == true) {
|
|
||||||
name = line.substringAfter("=")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
entry = zipInputStream.nextEntry
|
|
||||||
}
|
|
||||||
name
|
|
||||||
} catch (e: Exception) {
|
|
||||||
context.getString(R.string.unknown_module)
|
|
||||||
}
|
}
|
||||||
|
ModuleUtils.takePersistableUriPermission(context, uri)
|
||||||
|
val moduleName = ModuleUtils.extractModuleName(context, uri)
|
||||||
|
selectedModules.add(uri)
|
||||||
|
selectedModuleNames[uri] = moduleName
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("ModuleScreen", "Error while processing URI: $uri, Error: ${e.message}")
|
||||||
}
|
}
|
||||||
selectedModules.add(uri)
|
|
||||||
selectedModuleNames[uri] = moduleName
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i in 0 until clipData.itemCount) {
|
for (i in 0 until clipData.itemCount) {
|
||||||
@@ -136,7 +123,11 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
processUri(uri)
|
processUri(uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 显示确认对话框
|
if (selectedModules.isEmpty()) {
|
||||||
|
snackBarHost.showSnackbar("Unable to access selected module files")
|
||||||
|
return@launch
|
||||||
|
}
|
||||||
|
|
||||||
val modulesList = selectedModuleNames.values.joinToString("\n• ", "• ")
|
val modulesList = selectedModuleNames.values.joinToString("\n• ", "• ")
|
||||||
val confirmResult = confirmDialog.awaitConfirm(
|
val confirmResult = confirmDialog.awaitConfirm(
|
||||||
title = context.getString(R.string.module_install),
|
title = context.getString(R.string.module_install),
|
||||||
@@ -146,49 +137,42 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
if (confirmResult == ConfirmResult.Confirmed) {
|
if (confirmResult == ConfirmResult.Confirmed) {
|
||||||
// 批量安装模块
|
|
||||||
navigator.navigate(FlashScreenDestination(FlashIt.FlashModules(selectedModules)))
|
|
||||||
viewModel.markNeedRefresh()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 单个文件安装逻辑
|
|
||||||
val uri = data.data ?: return@launch
|
|
||||||
val moduleName = withContext(Dispatchers.IO) {
|
|
||||||
try {
|
try {
|
||||||
val zipInputStream = ZipInputStream(context.contentResolver.openInputStream(uri))
|
// 批量安装模块
|
||||||
var entry = zipInputStream.nextEntry
|
navigator.navigate(FlashScreenDestination(FlashIt.FlashModules(selectedModules)))
|
||||||
var name = context.getString(R.string.unknown_module)
|
viewModel.markNeedRefresh()
|
||||||
|
|
||||||
while (entry != null) {
|
|
||||||
if (entry.name == "module.prop") {
|
|
||||||
val reader = BufferedReader(InputStreamReader(zipInputStream))
|
|
||||||
var line: String?
|
|
||||||
while (reader.readLine().also { line = it } != null) {
|
|
||||||
if (line?.startsWith("name=") == true) {
|
|
||||||
name = line.substringAfter("=")
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
entry = zipInputStream.nextEntry
|
|
||||||
}
|
|
||||||
name
|
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
context.getString(R.string.unknown_module)
|
Log.e("ModuleScreen", "Error navigating to FlashScreen: ${e.message}")
|
||||||
|
snackBarHost.showSnackbar("Error while installing module: ${e.message}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
val uri = data.data ?: return@launch
|
||||||
|
// 单个安装模块
|
||||||
|
try {
|
||||||
|
if (!ModuleUtils.isUriAccessible(context, uri)) {
|
||||||
|
snackBarHost.showSnackbar("Unable to access selected module files")
|
||||||
|
return@launch
|
||||||
|
}
|
||||||
|
|
||||||
val confirmResult = confirmDialog.awaitConfirm(
|
ModuleUtils.takePersistableUriPermission(context, uri)
|
||||||
title = context.getString(R.string.module_install),
|
|
||||||
content = context.getString(R.string.module_install_confirm, moduleName),
|
|
||||||
confirm = context.getString(R.string.install),
|
|
||||||
dismiss = context.getString(R.string.cancel)
|
|
||||||
)
|
|
||||||
|
|
||||||
if (confirmResult == ConfirmResult.Confirmed) {
|
val moduleName = ModuleUtils.extractModuleName(context, uri)
|
||||||
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(uri)))
|
|
||||||
viewModel.markNeedRefresh()
|
val confirmResult = confirmDialog.awaitConfirm(
|
||||||
|
title = context.getString(R.string.module_install),
|
||||||
|
content = context.getString(R.string.module_install_confirm, moduleName),
|
||||||
|
confirm = context.getString(R.string.install),
|
||||||
|
dismiss = context.getString(R.string.cancel)
|
||||||
|
)
|
||||||
|
|
||||||
|
if (confirmResult == ConfirmResult.Confirmed) {
|
||||||
|
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(uri)))
|
||||||
|
viewModel.markNeedRefresh()
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("ModuleScreen", "Error processing a single URI: $uri, Error: ${e.message}")
|
||||||
|
snackBarHost.showSnackbar("Error processing module file: ${e.message}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -393,20 +377,60 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(it)))
|
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(it)))
|
||||||
},
|
},
|
||||||
onClickModule = { id, name, hasWebUi ->
|
onClickModule = { id, name, hasWebUi ->
|
||||||
|
val currentTime = System.currentTimeMillis()
|
||||||
|
if (currentTime - lastClickTime < 600) {
|
||||||
|
Log.d("ModuleScreen", "Click too fast, ignoring")
|
||||||
|
return@ModuleList
|
||||||
|
}
|
||||||
|
lastClickTime = currentTime
|
||||||
|
|
||||||
if (hasWebUi) {
|
if (hasWebUi) {
|
||||||
webUILauncher.launch(
|
try {
|
||||||
if (prefs.getBoolean("use_webuix", false) && Platform.isAlive) {
|
val wxEngine = Intent(context, WebUIXActivity::class.java)
|
||||||
Intent(context, WebUIXActivity::class.java)
|
.setData("kernelsu://webuix/$id".toUri())
|
||||||
.setData("kernelsu://webuix/$id".toUri())
|
.putExtra("id", id)
|
||||||
.putExtra("id", id)
|
.putExtra("name", name)
|
||||||
.putExtra("name", name)
|
|
||||||
} else {
|
val ksuEngine = Intent(context, WebUIActivity::class.java)
|
||||||
Intent(context, WebUIActivity::class.java)
|
.setData("kernelsu://webui/$id".toUri())
|
||||||
.setData("kernelsu://webui/$id".toUri())
|
.putExtra("id", id)
|
||||||
.putExtra("id", id)
|
.putExtra("name", name)
|
||||||
.putExtra("name", name)
|
|
||||||
|
val config = try {
|
||||||
|
id.asModuleConfig
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("ModuleScreen", "Failed to get config from id: $id", e)
|
||||||
|
null
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
val globalEngine = prefs.getString("webui_engine", "default") ?: "default"
|
||||||
|
val moduleEngine = config?.getWebuiEngine(context)
|
||||||
|
val selectedEngine = when (globalEngine) {
|
||||||
|
"wx" -> wxEngine
|
||||||
|
"ksu" -> ksuEngine
|
||||||
|
"default" -> {
|
||||||
|
when (moduleEngine) {
|
||||||
|
"wx" -> wxEngine
|
||||||
|
"ksu" -> ksuEngine
|
||||||
|
else -> {
|
||||||
|
if (Platform.isAlive) {
|
||||||
|
wxEngine
|
||||||
|
} else {
|
||||||
|
ksuEngine
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> ksuEngine
|
||||||
|
}
|
||||||
|
webUILauncher.launch(selectedEngine)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("ModuleScreen", "Error launching WebUI: ${e.message}", e)
|
||||||
|
scope.launch {
|
||||||
|
snackBarHost.showSnackbar("Error launching WebUI: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return@ModuleList
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
context = context,
|
context = context,
|
||||||
@@ -868,6 +892,7 @@ fun ModuleItem(
|
|||||||
onClick = { onUpdate(module) },
|
onClick = { onUpdate(module) },
|
||||||
shape = ButtonDefaults.textShape,
|
shape = ButtonDefaults.textShape,
|
||||||
contentPadding = ButtonDefaults.TextButtonContentPadding,
|
contentPadding = ButtonDefaults.TextButtonContentPadding,
|
||||||
|
colors = ButtonDefaults.filledTonalButtonColors()
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
modifier = Modifier.size(20.dp),
|
modifier = Modifier.size(20.dp),
|
||||||
@@ -919,7 +944,8 @@ fun ModuleItemPreview() {
|
|||||||
updateJson = "",
|
updateJson = "",
|
||||||
hasWebUi = false,
|
hasWebUi = false,
|
||||||
hasActionScript = false,
|
hasActionScript = false,
|
||||||
dirId = "dirId"
|
dirId = "dirId",
|
||||||
|
config = ModuleConfig(),
|
||||||
)
|
)
|
||||||
ModuleItem(EmptyDestinationsNavigator, module, "", {}, {}, {}, {})
|
ModuleItem(EmptyDestinationsNavigator, module, "", {}, {}, {}, {})
|
||||||
}
|
}
|
||||||
@@ -28,43 +28,14 @@ import androidx.compose.foundation.layout.size
|
|||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||||
import androidx.compose.material.icons.automirrored.filled.NavigateNext
|
import androidx.compose.material.icons.automirrored.filled.NavigateNext
|
||||||
import androidx.compose.material.icons.filled.AcUnit
|
import androidx.compose.material.icons.filled.*
|
||||||
import androidx.compose.material.icons.filled.Brush
|
|
||||||
import androidx.compose.material.icons.filled.ColorLens
|
|
||||||
import androidx.compose.material.icons.filled.DarkMode
|
|
||||||
import androidx.compose.material.icons.filled.KeyboardArrowDown
|
|
||||||
import androidx.compose.material.icons.filled.KeyboardArrowUp
|
|
||||||
import androidx.compose.material.icons.filled.Language
|
|
||||||
import androidx.compose.material.icons.filled.LightMode
|
|
||||||
import androidx.compose.material.icons.filled.Opacity
|
|
||||||
import androidx.compose.material.icons.filled.Palette
|
|
||||||
import androidx.compose.material.icons.filled.Security
|
|
||||||
import androidx.compose.material.icons.filled.VisibilityOff
|
|
||||||
import androidx.compose.material.icons.filled.Wallpaper
|
|
||||||
import androidx.compose.material3.AlertDialog
|
import androidx.compose.material3.AlertDialog
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.HorizontalDivider
|
import androidx.compose.material3.*
|
||||||
import androidx.compose.material3.Icon
|
|
||||||
import androidx.compose.material3.IconButton
|
|
||||||
import androidx.compose.material3.ListItem
|
|
||||||
import androidx.compose.material3.ListItemDefaults
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.RadioButton
|
|
||||||
import androidx.compose.material3.Scaffold
|
|
||||||
import androidx.compose.material3.Slider
|
|
||||||
import androidx.compose.material3.SliderDefaults
|
|
||||||
import androidx.compose.material3.Surface
|
|
||||||
import androidx.compose.material3.Switch
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.material3.TextButton
|
|
||||||
import androidx.compose.material3.TopAppBar
|
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
|
||||||
import androidx.compose.material3.rememberTopAppBarState
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@@ -88,6 +59,7 @@ import androidx.core.content.edit
|
|||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootGraph
|
import com.ramcosta.composedestinations.annotation.RootGraph
|
||||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
|
import com.sukisu.ultra.Natives
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
import com.sukisu.ultra.ui.MainActivity
|
import com.sukisu.ultra.ui.MainActivity
|
||||||
import com.sukisu.ultra.ui.component.ImageEditorDialog
|
import com.sukisu.ultra.ui.component.ImageEditorDialog
|
||||||
@@ -112,6 +84,10 @@ import kotlinx.coroutines.launch
|
|||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
fun saveCardConfig(context: Context) {
|
fun saveCardConfig(context: Context) {
|
||||||
CardConfig.save(context)
|
CardConfig.save(context)
|
||||||
}
|
}
|
||||||
@@ -506,8 +482,9 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerHigh
|
||||||
val cardAlphaUse = CardConfig.cardAlpha
|
val cardAlphaUse = CardConfig.cardAlpha
|
||||||
|
val isDarkTheme = isSystemInDarkTheme()
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
@@ -545,12 +522,16 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
enter = fadeIn() + expandVertically(),
|
enter = fadeIn() + expandVertically(),
|
||||||
exit = fadeOut() + shrinkVertically()
|
exit = fadeOut() + shrinkVertically()
|
||||||
) {
|
) {
|
||||||
Surface(
|
Card(
|
||||||
shape = RoundedCornerShape(16.dp),
|
modifier = Modifier
|
||||||
tonalElevation = 1.dp,
|
.fillMaxWidth()
|
||||||
modifier = Modifier.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
|
),
|
||||||
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
// 语言设置
|
// 语言设置
|
||||||
ListItem(
|
ListItem(
|
||||||
headlineContent = { Text(stringResource(R.string.language_setting)) },
|
headlineContent = { Text(stringResource(R.string.language_setting)) },
|
||||||
@@ -578,11 +559,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
modifier = Modifier.clickable { showLanguageDialog = true }
|
modifier = Modifier.clickable { showLanguageDialog = true }
|
||||||
)
|
)
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 主题模式
|
// 主题模式
|
||||||
ListItem(
|
ListItem(
|
||||||
headlineContent = { Text(stringResource(R.string.theme_mode)) },
|
headlineContent = { Text(stringResource(R.string.theme_mode)) },
|
||||||
@@ -607,11 +583,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
modifier = Modifier.clickable { showThemeModeDialog = true }
|
modifier = Modifier.clickable { showThemeModeDialog = true }
|
||||||
)
|
)
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 动态颜色开关
|
// 动态颜色开关
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
@@ -623,11 +594,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
useDynamicColor = enabled
|
useDynamicColor = enabled
|
||||||
context.saveDynamicColorState(enabled)
|
context.saveDynamicColorState(enabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 只在未启用动态颜色时显示主题色选择
|
// 只在未启用动态颜色时显示主题色选择
|
||||||
@@ -641,7 +607,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
headlineContent = { Text(stringResource(R.string.theme_color)) },
|
headlineContent = { Text(stringResource(R.string.theme_color)) },
|
||||||
supportingContent = {
|
supportingContent = {
|
||||||
val currentThemeName = when (ThemeConfig.currentTheme) {
|
val currentThemeName = when (ThemeConfig.currentTheme) {
|
||||||
is ThemeColors.Default -> stringResource(R.string.color_default)
|
|
||||||
is ThemeColors.Green -> stringResource(R.string.color_green)
|
is ThemeColors.Green -> stringResource(R.string.color_green)
|
||||||
is ThemeColors.Purple -> stringResource(R.string.color_purple)
|
is ThemeColors.Purple -> stringResource(R.string.color_purple)
|
||||||
is ThemeColors.Orange -> stringResource(R.string.color_orange)
|
is ThemeColors.Orange -> stringResource(R.string.color_orange)
|
||||||
@@ -671,11 +636,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
),
|
),
|
||||||
modifier = Modifier.clickable { showThemeColorDialog = true }
|
modifier = Modifier.clickable { showThemeColorDialog = true }
|
||||||
)
|
)
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -767,69 +727,47 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 自定义背景开关
|
// 自定义背景开关
|
||||||
ListItem(
|
SwitchItem(
|
||||||
headlineContent = { Text(stringResource(id = R.string.settings_custom_background)) },
|
icon = Icons.Filled.Wallpaper,
|
||||||
supportingContent = { Text(stringResource(id = R.string.settings_custom_background_summary)) },
|
title = stringResource(id = R.string.settings_custom_background),
|
||||||
leadingContent = {
|
summary = stringResource(id = R.string.settings_custom_background_summary),
|
||||||
Icon(
|
checked = isCustomBackgroundEnabled
|
||||||
Icons.Filled.Wallpaper,
|
) { isChecked ->
|
||||||
contentDescription = null,
|
if (isChecked) {
|
||||||
tint = if (isCustomBackgroundEnabled)
|
pickImageLauncher.launch("image/*")
|
||||||
MaterialTheme.colorScheme.primary
|
} else {
|
||||||
else
|
context.saveCustomBackground(null)
|
||||||
MaterialTheme.colorScheme.onSurfaceVariant
|
isCustomBackgroundEnabled = false
|
||||||
)
|
CardConfig.cardElevation
|
||||||
},
|
CardConfig.cardAlpha = 1f
|
||||||
trailingContent = {
|
CardConfig.cardDim = 0f
|
||||||
Switch(
|
CardConfig.isCustomAlphaSet = false
|
||||||
checked = isCustomBackgroundEnabled,
|
CardConfig.isCustomDimSet = false
|
||||||
onCheckedChange = { isChecked ->
|
CardConfig.isCustomBackgroundEnabled = false
|
||||||
if (isChecked) {
|
saveCardConfig(context)
|
||||||
pickImageLauncher.launch("image/*")
|
cardAlpha = 1f
|
||||||
} else {
|
cardDim = 0f
|
||||||
context.saveCustomBackground(null)
|
|
||||||
isCustomBackgroundEnabled = false
|
|
||||||
CardConfig.cardElevation
|
|
||||||
CardConfig.cardAlpha = 1f
|
|
||||||
CardConfig.cardDim = 0f
|
|
||||||
CardConfig.isCustomAlphaSet = false
|
|
||||||
CardConfig.isCustomDimSet = false
|
|
||||||
CardConfig.isCustomBackgroundEnabled = false
|
|
||||||
saveCardConfig(context)
|
|
||||||
cardAlpha = 1f
|
|
||||||
cardDim = 0f
|
|
||||||
|
|
||||||
// 重置其他相关设置
|
// 重置其他相关设置
|
||||||
ThemeConfig.needsResetOnThemeChange = true
|
ThemeConfig.needsResetOnThemeChange = true
|
||||||
ThemeConfig.preventBackgroundRefresh = false
|
ThemeConfig.preventBackgroundRefresh = false
|
||||||
|
|
||||||
context.getSharedPreferences("theme_prefs", Context.MODE_PRIVATE)
|
context.getSharedPreferences("theme_prefs", Context.MODE_PRIVATE)
|
||||||
.edit {
|
.edit {
|
||||||
putBoolean(
|
putBoolean(
|
||||||
"prevent_background_refresh",
|
"prevent_background_refresh",
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
context.getString(R.string.background_removed),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
)
|
|
||||||
},
|
Toast.makeText(
|
||||||
colors = ListItemDefaults.colors(
|
context,
|
||||||
containerColor = Color.Transparent
|
context.getString(R.string.background_removed),
|
||||||
)
|
Toast.LENGTH_SHORT
|
||||||
)
|
).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 透明度和亮度调节滑动条
|
// 透明度和亮度调节滑动条
|
||||||
AnimatedVisibility(
|
AnimatedVisibility(
|
||||||
@@ -954,12 +892,16 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
enter = fadeIn() + expandVertically(),
|
enter = fadeIn() + expandVertically(),
|
||||||
exit = fadeOut() + shrinkVertically()
|
exit = fadeOut() + shrinkVertically()
|
||||||
) {
|
) {
|
||||||
Surface(
|
Card(
|
||||||
shape = RoundedCornerShape(16.dp),
|
modifier = Modifier
|
||||||
tonalElevation = 1.dp,
|
.fillMaxWidth()
|
||||||
modifier = Modifier.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
|
),
|
||||||
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
// 添加简洁模式开关
|
// 添加简洁模式开关
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.Brush,
|
icon = Icons.Filled.Brush,
|
||||||
@@ -970,10 +912,7 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
onSimpleModeChange(it)
|
onSimpleModeChange(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 隐藏内核部分版本号
|
// 隐藏内核部分版本号
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
@@ -985,11 +924,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
onHideVersionChange(it)
|
onHideVersionChange(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 模块数量等信息
|
// 模块数量等信息
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.VisibilityOff,
|
icon = Icons.Filled.VisibilityOff,
|
||||||
@@ -999,12 +933,7 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
) {
|
) {
|
||||||
onHideOtherInfoChange(it)
|
onHideOtherInfoChange(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// SuSFS 状态信息
|
// SuSFS 状态信息
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.VisibilityOff,
|
icon = Icons.Filled.VisibilityOff,
|
||||||
@@ -1015,26 +944,18 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
onHideSusfsStatusChange(it)
|
onHideSusfsStatusChange(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
if (Natives.version >= Natives.MINIMAL_SUPPORTED_KPM) {
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
// 显示KPM开关
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
SwitchItem(
|
||||||
)
|
icon = Icons.Filled.Visibility,
|
||||||
|
title = stringResource(R.string.show_kpm_info),
|
||||||
// 显示KPM开关
|
summary = stringResource(R.string.show_kpm_info_summary),
|
||||||
SwitchItem(
|
checked = isShowKpmInfo
|
||||||
icon = Icons.Filled.VisibilityOff,
|
) {
|
||||||
title = stringResource(R.string.show_kpm_info),
|
onShowKpmInfoChange(it)
|
||||||
summary = stringResource(R.string.show_kpm_info_summary),
|
}
|
||||||
checked = isShowKpmInfo
|
|
||||||
) {
|
|
||||||
onShowKpmInfoChange(it)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
|
|
||||||
// 隐藏链接信息
|
// 隐藏链接信息
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.VisibilityOff,
|
icon = Icons.Filled.VisibilityOff,
|
||||||
@@ -1060,12 +981,16 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
enter = fadeIn() + expandVertically(),
|
enter = fadeIn() + expandVertically(),
|
||||||
exit = fadeOut() + shrinkVertically()
|
exit = fadeOut() + shrinkVertically()
|
||||||
) {
|
) {
|
||||||
Surface(
|
Card(
|
||||||
shape = RoundedCornerShape(16.dp),
|
modifier = Modifier
|
||||||
tonalElevation = 1.dp,
|
.fillMaxWidth()
|
||||||
modifier = Modifier.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp),
|
||||||
|
colors = CardDefaults.cardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
|
),
|
||||||
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
// SELinux 开关
|
// SELinux 开关
|
||||||
KsuIsValid {
|
KsuIsValid {
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
@@ -1097,20 +1022,15 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HorizontalDivider(
|
|
||||||
modifier = Modifier.padding(horizontal = 16.dp),
|
|
||||||
color = MaterialTheme.colorScheme.outlineVariant
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SuSFS 配置(仅在支持时显示)
|
// SuSFS 配置(仅在支持时显示)
|
||||||
val suSFS = getSuSFS()
|
val suSFS = getSuSFS()
|
||||||
val isSUS_SU = getSuSFSFeatures()
|
val isSUS_SU = getSuSFSFeatures()
|
||||||
if (suSFS == "Supported" && isSUS_SU == "CONFIG_KSU_SUSFS_SUS_SU") {
|
if (suSFS == "Supported" && isSUS_SU == "CONFIG_KSU_SUSFS_SUS_SU") {
|
||||||
// 初始化时,默认启用
|
// 默认启用
|
||||||
var isEnabled by rememberSaveable {
|
var isEnabled by rememberSaveable {
|
||||||
mutableStateOf(true) // 默认启用
|
mutableStateOf(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 在启动时检查状态
|
// 在启动时检查状态
|
||||||
@@ -1208,6 +1128,12 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
ThemeConfig.forceDarkMode = null
|
ThemeConfig.forceDarkMode = null
|
||||||
CardConfig.isUserLightModeEnabled = false
|
CardConfig.isUserLightModeEnabled = false
|
||||||
CardConfig.isUserDarkModeEnabled = false
|
CardConfig.isUserDarkModeEnabled = false
|
||||||
|
if (!CardConfig.isCustomAlphaSet) {
|
||||||
|
CardConfig.cardAlpha = 1f
|
||||||
|
}
|
||||||
|
if (!CardConfig.isCustomDimSet) {
|
||||||
|
CardConfig.cardDim = if (isDarkTheme) 0.5f else 0f
|
||||||
|
}
|
||||||
CardConfig.save(context)
|
CardConfig.save(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1285,7 +1211,6 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.clickable {
|
.clickable {
|
||||||
context.saveThemeColors(when (theme) {
|
context.saveThemeColors(when (theme) {
|
||||||
ThemeColors.Default -> "default"
|
|
||||||
ThemeColors.Green -> "green"
|
ThemeColors.Green -> "green"
|
||||||
ThemeColors.Purple -> "purple"
|
ThemeColors.Purple -> "purple"
|
||||||
ThemeColors.Orange -> "orange"
|
ThemeColors.Orange -> "orange"
|
||||||
@@ -1304,11 +1229,12 @@ fun MoreSettingsScreen(navigator: DestinationsNavigator) {
|
|||||||
onClick = null
|
onClick = null
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.width(12.dp))
|
Spacer(modifier = Modifier.width(12.dp))
|
||||||
|
val isDark = isSystemInDarkTheme()
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.size(24.dp)
|
.size(24.dp)
|
||||||
.clip(CircleShape)
|
.clip(CircleShape)
|
||||||
.background(theme.Primary)
|
.background(if (isDark) theme.primaryDark else theme.primaryLight)
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.width(12.dp))
|
Spacer(modifier = Modifier.width(12.dp))
|
||||||
Text(name)
|
Text(name)
|
||||||
|
|||||||
@@ -59,21 +59,29 @@ import com.sukisu.ultra.*
|
|||||||
import com.sukisu.ultra.ui.component.*
|
import com.sukisu.ultra.ui.component.*
|
||||||
import com.sukisu.ultra.ui.theme.*
|
import com.sukisu.ultra.ui.theme.*
|
||||||
import com.sukisu.ultra.ui.theme.CardConfig.cardAlpha
|
import com.sukisu.ultra.ui.theme.CardConfig.cardAlpha
|
||||||
import com.sukisu.ultra.ui.theme.CardConfig.cardElevation
|
|
||||||
import com.sukisu.ultra.ui.util.LocalSnackbarHost
|
import com.sukisu.ultra.ui.util.LocalSnackbarHost
|
||||||
import com.sukisu.ultra.ui.util.getBugreportFile
|
import com.sukisu.ultra.ui.util.getBugreportFile
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
import java.time.format.DateTimeFormatter
|
import java.time.format.DateTimeFormatter
|
||||||
import com.sukisu.ultra.ui.component.KsuIsValid
|
import com.sukisu.ultra.ui.component.KsuIsValid
|
||||||
import com.dergoogler.mmrl.platform.Platform
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Destination<RootGraph>
|
@Destination<RootGraph>
|
||||||
@Composable
|
@Composable
|
||||||
fun SettingScreen(navigator: DestinationsNavigator) {
|
fun SettingScreen(navigator: DestinationsNavigator) {
|
||||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||||
val snackBarHost = LocalSnackbarHost.current
|
val snackBarHost = LocalSnackbarHost.current
|
||||||
|
val context = LocalContext.current
|
||||||
|
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
var selectedEngine by rememberSaveable {
|
||||||
|
mutableStateOf(
|
||||||
|
prefs.getString("webui_engine", "default") ?: "default"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
@@ -119,9 +127,9 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp, vertical = 8.dp),
|
.padding(horizontal = 16.dp, vertical = 8.dp),
|
||||||
colors = CardDefaults.cardColors(
|
colors = CardDefaults.cardColors(
|
||||||
containerColor = MaterialTheme.colorScheme.surfaceContainerLow.copy(alpha = cardAlpha)
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation)
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
Text(
|
Text(
|
||||||
@@ -150,17 +158,16 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
KsuIsValid {
|
KsuIsValid {
|
||||||
SwitchSettingItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.FolderDelete,
|
icon = Icons.Filled.FolderDelete,
|
||||||
title = stringResource(id = R.string.settings_umount_modules_default),
|
title = stringResource(id = R.string.settings_umount_modules_default),
|
||||||
summary = stringResource(id = R.string.settings_umount_modules_default_summary),
|
summary = stringResource(id = R.string.settings_umount_modules_default_summary),
|
||||||
checked = umountChecked,
|
checked = umountChecked
|
||||||
onCheckedChange = {
|
) { enabled ->
|
||||||
if (Natives.setDefaultUmountModules(it)) {
|
if (Natives.setDefaultUmountModules(enabled)) {
|
||||||
umountChecked = it
|
umountChecked = enabled
|
||||||
}
|
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SU 禁用开关(仅在兼容版本显示)
|
// SU 禁用开关(仅在兼容版本显示)
|
||||||
@@ -169,18 +176,17 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
var isSuDisabled by rememberSaveable {
|
var isSuDisabled by rememberSaveable {
|
||||||
mutableStateOf(!Natives.isSuEnabled())
|
mutableStateOf(!Natives.isSuEnabled())
|
||||||
}
|
}
|
||||||
SwitchSettingItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.RemoveModerator,
|
icon = Icons.Filled.RemoveModerator,
|
||||||
title = stringResource(id = R.string.settings_disable_su),
|
title = stringResource(id = R.string.settings_disable_su),
|
||||||
summary = stringResource(id = R.string.settings_disable_su_summary),
|
summary = stringResource(id = R.string.settings_disable_su_summary),
|
||||||
checked = isSuDisabled,
|
checked = isSuDisabled
|
||||||
onCheckedChange = { checked ->
|
) { enabled ->
|
||||||
val shouldEnable = !checked
|
val shouldEnable = !enabled
|
||||||
if (Natives.setSuEnabled(shouldEnable)) {
|
if (Natives.setSuEnabled(shouldEnable)) {
|
||||||
isSuDisabled = !shouldEnable
|
isSuDisabled = enabled
|
||||||
}
|
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,9 +198,9 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp, vertical = 8.dp),
|
.padding(horizontal = 16.dp, vertical = 8.dp),
|
||||||
colors = CardDefaults.cardColors(
|
colors = CardDefaults.cardColors(
|
||||||
containerColor = MaterialTheme.colorScheme.surfaceContainerLow.copy(alpha = cardAlpha)
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation)
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
Text(
|
Text(
|
||||||
@@ -212,78 +218,112 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
prefs.getBoolean("check_update", true)
|
prefs.getBoolean("check_update", true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
SwitchSettingItem(
|
SwitchItem(
|
||||||
icon = Icons.Filled.Update,
|
icon = Icons.Filled.Update,
|
||||||
title = stringResource(id = R.string.settings_check_update),
|
title = stringResource(id = R.string.settings_check_update),
|
||||||
summary = stringResource(id = R.string.settings_check_update_summary),
|
summary = stringResource(id = R.string.settings_check_update_summary),
|
||||||
checked = checkUpdate,
|
checked = checkUpdate
|
||||||
onCheckedChange = {
|
) { enabled ->
|
||||||
prefs.edit {putBoolean("check_update", it) }
|
prefs.edit { putBoolean("check_update", enabled) }
|
||||||
checkUpdate = it
|
checkUpdate = enabled
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
|
||||||
// Web调试开关
|
// WebUI引擎选择
|
||||||
|
KsuIsValid {
|
||||||
|
val engineOptions = listOf(
|
||||||
|
"default" to stringResource(id = R.string.engine_auto_select),
|
||||||
|
"wx" to stringResource(id = R.string.engine_force_webuix),
|
||||||
|
"ksu" to stringResource(id = R.string.engine_force_ksu)
|
||||||
|
)
|
||||||
|
|
||||||
|
var showEngineDialog by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
SettingItem(
|
||||||
|
icon = Icons.Filled.WebAsset,
|
||||||
|
title = stringResource(id = R.string.use_webuix),
|
||||||
|
summary = engineOptions.find { it.first == selectedEngine }?.second
|
||||||
|
?: stringResource(id = R.string.engine_auto_select),
|
||||||
|
onClick = {
|
||||||
|
showEngineDialog = true
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (showEngineDialog) {
|
||||||
|
AlertDialog(
|
||||||
|
onDismissRequest = { showEngineDialog = false },
|
||||||
|
title = { Text(stringResource(id = R.string.use_webuix)) },
|
||||||
|
text = {
|
||||||
|
Column {
|
||||||
|
engineOptions.forEach { (value, label) ->
|
||||||
|
Row(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.clickable {
|
||||||
|
selectedEngine = value
|
||||||
|
prefs.edit {
|
||||||
|
putString("webui_engine", value)
|
||||||
|
}
|
||||||
|
showEngineDialog = false
|
||||||
|
}
|
||||||
|
.padding(vertical = 12.dp),
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
) {
|
||||||
|
RadioButton(
|
||||||
|
selected = selectedEngine == value,
|
||||||
|
onClick = null
|
||||||
|
)
|
||||||
|
Spacer(modifier = Modifier.width(8.dp))
|
||||||
|
Text(text = label)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
confirmButton = {
|
||||||
|
TextButton(
|
||||||
|
onClick = { showEngineDialog = false }
|
||||||
|
) {
|
||||||
|
Text(stringResource(id = R.string.cancel))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Web调试和Web X Eruda 开关
|
||||||
var enableWebDebugging by rememberSaveable {
|
var enableWebDebugging by rememberSaveable {
|
||||||
mutableStateOf(
|
mutableStateOf(
|
||||||
prefs.getBoolean("enable_web_debugging", false)
|
prefs.getBoolean("enable_web_debugging", false)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
KsuIsValid {
|
|
||||||
SwitchSettingItem(
|
|
||||||
icon = Icons.Filled.DeveloperMode,
|
|
||||||
title = stringResource(id = R.string.enable_web_debugging),
|
|
||||||
summary = stringResource(id = R.string.enable_web_debugging_summary),
|
|
||||||
checked = enableWebDebugging,
|
|
||||||
onCheckedChange = {
|
|
||||||
prefs.edit { putBoolean("enable_web_debugging", it) }
|
|
||||||
enableWebDebugging = it
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Web X 开关
|
|
||||||
var useWebUIX by rememberSaveable {
|
|
||||||
mutableStateOf(
|
|
||||||
prefs.getBoolean("use_webuix", false)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
KsuIsValid {
|
|
||||||
SwitchItem(
|
|
||||||
beta = true,
|
|
||||||
enabled = Platform.isAlive,
|
|
||||||
icon = Icons.Filled.WebAsset,
|
|
||||||
title = stringResource(id = R.string.use_webuix),
|
|
||||||
summary = stringResource(id = R.string.use_webuix_summary),
|
|
||||||
checked = useWebUIX
|
|
||||||
) {
|
|
||||||
prefs.edit { putBoolean("use_webuix", it) }
|
|
||||||
useWebUIX = it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Web X Eruda 开关
|
|
||||||
var useWebUIXEruda by rememberSaveable {
|
var useWebUIXEruda by rememberSaveable {
|
||||||
mutableStateOf(
|
mutableStateOf(
|
||||||
prefs.getBoolean("use_webuix_eruda", false)
|
prefs.getBoolean("use_webuix_eruda", false)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
KsuIsValid {
|
KsuIsValid {
|
||||||
|
SwitchItem(
|
||||||
|
icon = Icons.Filled.DeveloperMode,
|
||||||
|
title = stringResource(id = R.string.enable_web_debugging),
|
||||||
|
summary = stringResource(id = R.string.enable_web_debugging_summary),
|
||||||
|
checked = enableWebDebugging
|
||||||
|
) { enabled ->
|
||||||
|
prefs.edit { putBoolean("enable_web_debugging", enabled) }
|
||||||
|
enableWebDebugging = enabled
|
||||||
|
}
|
||||||
|
|
||||||
AnimatedVisibility(
|
AnimatedVisibility(
|
||||||
visible = useWebUIX && enableWebDebugging,
|
visible = enableWebDebugging && selectedEngine == "wx",
|
||||||
enter = fadeIn() + expandVertically(),
|
enter = fadeIn() + expandVertically(),
|
||||||
exit = fadeOut() + shrinkVertically()
|
exit = fadeOut() + shrinkVertically()
|
||||||
) {
|
) {
|
||||||
SwitchItem(
|
SwitchItem(
|
||||||
beta = true,
|
|
||||||
enabled = Platform.isAlive && useWebUIX && enableWebDebugging,
|
|
||||||
icon = Icons.Filled.FormatListNumbered,
|
icon = Icons.Filled.FormatListNumbered,
|
||||||
title = stringResource(id = R.string.use_webuix_eruda),
|
title = stringResource(id = R.string.use_webuix_eruda),
|
||||||
summary = stringResource(id = R.string.use_webuix_eruda_summary),
|
summary = stringResource(id = R.string.use_webuix_eruda_summary),
|
||||||
checked = useWebUIXEruda
|
checked = useWebUIXEruda
|
||||||
) {
|
) { enabled ->
|
||||||
prefs.edit { putBoolean("use_webuix_eruda", it) }
|
prefs.edit { putBoolean("use_webuix_eruda", enabled) }
|
||||||
useWebUIXEruda = it
|
useWebUIXEruda = enabled
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -306,9 +346,9 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp, vertical = 8.dp),
|
.padding(horizontal = 16.dp, vertical = 8.dp),
|
||||||
colors = CardDefaults.cardColors(
|
colors = CardDefaults.cardColors(
|
||||||
containerColor = MaterialTheme.colorScheme.surfaceContainerLow.copy(alpha = cardAlpha)
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation)
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
Text(
|
Text(
|
||||||
@@ -399,15 +439,15 @@ fun SettingScreen(navigator: DestinationsNavigator) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置分组卡片 - 关于
|
// 关于
|
||||||
Card(
|
Card(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp, vertical = 8.dp),
|
.padding(horizontal = 16.dp, vertical = 8.dp),
|
||||||
colors = CardDefaults.cardColors(
|
colors = CardDefaults.cardColors(
|
||||||
containerColor = MaterialTheme.colorScheme.surfaceContainerLow.copy(alpha = cardAlpha)
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh.copy(alpha = cardAlpha)
|
||||||
),
|
),
|
||||||
elevation = CardDefaults.cardElevation(defaultElevation = cardElevation)
|
elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
|
||||||
) {
|
) {
|
||||||
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
Column(modifier = Modifier.padding(vertical = 8.dp)) {
|
||||||
Text(
|
Text(
|
||||||
@@ -504,7 +544,6 @@ fun SettingItem(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.ChevronRight,
|
imageVector = Icons.Filled.ChevronRight,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
@@ -514,60 +553,6 @@ fun SettingItem(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun SwitchSettingItem(
|
|
||||||
icon: ImageVector,
|
|
||||||
title: String,
|
|
||||||
summary: String? = null,
|
|
||||||
checked: Boolean,
|
|
||||||
onCheckedChange: (Boolean) -> Unit
|
|
||||||
) {
|
|
||||||
Row(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.clickable { onCheckedChange(!checked) }
|
|
||||||
.padding(horizontal = 16.dp, vertical = 12.dp),
|
|
||||||
verticalAlignment = Alignment.CenterVertically
|
|
||||||
) {
|
|
||||||
Icon(
|
|
||||||
imageVector = icon,
|
|
||||||
contentDescription = null,
|
|
||||||
tint = MaterialTheme.colorScheme.primary,
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(end = 16.dp)
|
|
||||||
.size(24.dp)
|
|
||||||
)
|
|
||||||
|
|
||||||
Column(modifier = Modifier.weight(1f)) {
|
|
||||||
Text(
|
|
||||||
text = title,
|
|
||||||
style = MaterialTheme.typography.titleMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurface
|
|
||||||
)
|
|
||||||
if (summary != null) {
|
|
||||||
Text(
|
|
||||||
text = summary,
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Switch(
|
|
||||||
checked = checked,
|
|
||||||
onCheckedChange = onCheckedChange,
|
|
||||||
colors = SwitchDefaults.colors(
|
|
||||||
checkedThumbColor = MaterialTheme.colorScheme.onPrimary,
|
|
||||||
checkedTrackColor = MaterialTheme.colorScheme.primary,
|
|
||||||
checkedIconColor = MaterialTheme.colorScheme.primary,
|
|
||||||
uncheckedThumbColor = MaterialTheme.colorScheme.outline,
|
|
||||||
uncheckedTrackColor = MaterialTheme.colorScheme.surfaceVariant,
|
|
||||||
uncheckedIconColor = MaterialTheme.colorScheme.surfaceVariant
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun UninstallItem(
|
fun UninstallItem(
|
||||||
navigator: DestinationsNavigator,
|
navigator: DestinationsNavigator,
|
||||||
@@ -648,11 +633,6 @@ fun rememberUninstallDialog(onSelected: (UninstallType) -> Unit): DialogHandle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var selectedOption by remember { mutableStateOf<UninstallType?>(null) }
|
var selectedOption by remember { mutableStateOf<UninstallType?>(null) }
|
||||||
val cardColor = if (!ThemeConfig.useDynamicColor) {
|
|
||||||
ThemeConfig.currentTheme.ButtonContrast
|
|
||||||
} else {
|
|
||||||
MaterialTheme.colorScheme.surfaceContainerHigh
|
|
||||||
}
|
|
||||||
|
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
onDismissRequest = {
|
onDismissRequest = {
|
||||||
@@ -781,7 +761,7 @@ fun rememberUninstallDialog(onSelected: (UninstallType) -> Unit): DialogHandle {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
containerColor = cardColor,
|
containerColor = MaterialTheme.colorScheme.secondaryContainer,
|
||||||
shape = MaterialTheme.shapes.extraLarge,
|
shape = MaterialTheme.shapes.extraLarge,
|
||||||
tonalElevation = 4.dp
|
tonalElevation = 4.dp
|
||||||
)
|
)
|
||||||
@@ -794,7 +774,7 @@ private fun TopBar(
|
|||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
) {
|
) {
|
||||||
val systemIsDark = isSystemInDarkTheme()
|
val systemIsDark = isSystemInDarkTheme()
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = if (ThemeConfig.customBackgroundUri != null) {
|
val cardAlpha = if (ThemeConfig.customBackgroundUri != null) {
|
||||||
cardAlpha
|
cardAlpha
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
package com.sukisu.ultra.ui.screen
|
||||||
|
|
||||||
import androidx.compose.animation.*
|
import androidx.compose.animation.*
|
||||||
import androidx.compose.animation.core.*
|
import androidx.compose.animation.core.*
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
@@ -42,9 +44,16 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import com.sukisu.ultra.Natives
|
import com.sukisu.ultra.Natives
|
||||||
import com.sukisu.ultra.ui.component.SearchAppBar
|
import com.sukisu.ultra.ui.component.SearchAppBar
|
||||||
|
import com.sukisu.ultra.ui.theme.CardConfig
|
||||||
import com.sukisu.ultra.ui.util.ModuleModify
|
import com.sukisu.ultra.ui.util.ModuleModify
|
||||||
import com.sukisu.ultra.ui.viewmodel.SuperUserViewModel
|
import com.sukisu.ultra.ui.viewmodel.SuperUserViewModel
|
||||||
|
import com.dergoogler.mmrl.ui.component.LabelItem
|
||||||
|
import com.dergoogler.mmrl.ui.component.LabelItemDefaults
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class)
|
||||||
@Destination<RootGraph>
|
@Destination<RootGraph>
|
||||||
@Composable
|
@Composable
|
||||||
@@ -63,7 +72,7 @@ fun SuperUserScreen(navigator: DestinationsNavigator) {
|
|||||||
LaunchedEffect(key1 = navigator) {
|
LaunchedEffect(key1 = navigator) {
|
||||||
viewModel.search = ""
|
viewModel.search = ""
|
||||||
if (viewModel.appList.isEmpty()) {
|
if (viewModel.appList.isEmpty()) {
|
||||||
viewModel.fetchAppList()
|
// viewModel.fetchAppList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -514,9 +523,6 @@ fun SuperUserScreen(navigator: DestinationsNavigator) {
|
|||||||
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
||||||
val updatedProfile = profile.copy(allowSu = allowSu)
|
val updatedProfile = profile.copy(allowSu = allowSu)
|
||||||
if (Natives.setAppProfile(updatedProfile)) {
|
if (Natives.setAppProfile(updatedProfile)) {
|
||||||
// 不重新获取应用列表,避免滚动位置重置
|
|
||||||
// viewModel.fetchAppList()
|
|
||||||
// 仅更新当前应用的配置
|
|
||||||
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -556,9 +562,6 @@ fun SuperUserScreen(navigator: DestinationsNavigator) {
|
|||||||
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
||||||
val updatedProfile = profile.copy(allowSu = allowSu)
|
val updatedProfile = profile.copy(allowSu = allowSu)
|
||||||
if (Natives.setAppProfile(updatedProfile)) {
|
if (Natives.setAppProfile(updatedProfile)) {
|
||||||
// 不重新获取应用列表,避免滚动位置重置
|
|
||||||
// viewModel.fetchAppList()
|
|
||||||
// 仅更新当前应用的配置
|
|
||||||
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -598,9 +601,6 @@ fun SuperUserScreen(navigator: DestinationsNavigator) {
|
|||||||
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
val profile = Natives.getAppProfile(app.packageName, app.uid)
|
||||||
val updatedProfile = profile.copy(allowSu = allowSu)
|
val updatedProfile = profile.copy(allowSu = allowSu)
|
||||||
if (Natives.setAppProfile(updatedProfile)) {
|
if (Natives.setAppProfile(updatedProfile)) {
|
||||||
// 不重新获取应用列表,避免滚动位置重置
|
|
||||||
// viewModel.fetchAppList()
|
|
||||||
// 仅更新当前应用的配置
|
|
||||||
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
viewModel.updateAppProfileLocally(app.packageName, updatedProfile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -690,12 +690,14 @@ private fun AppItem(
|
|||||||
onLongClick: () -> Unit,
|
onLongClick: () -> Unit,
|
||||||
viewModel: SuperUserViewModel
|
viewModel: SuperUserViewModel
|
||||||
) {
|
) {
|
||||||
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
val cardColor = if (app.allowSu)
|
val cardColor = if (app.allowSu)
|
||||||
MaterialTheme.colorScheme.primaryContainer.copy(alpha = 0.3f)
|
MaterialTheme.colorScheme.surfaceVariant.copy(alpha = cardAlpha)
|
||||||
else if (app.hasCustomProfile)
|
else if (app.hasCustomProfile)
|
||||||
MaterialTheme.colorScheme.secondaryContainer.copy(alpha = 0.3f)
|
MaterialTheme.colorScheme.secondaryContainer.copy(alpha = cardAlpha)
|
||||||
else
|
else
|
||||||
MaterialTheme.colorScheme.surfaceContainerLow
|
MaterialTheme.colorScheme.tertiaryContainer.copy(alpha = cardAlpha)
|
||||||
|
|
||||||
Card(
|
Card(
|
||||||
colors = CardDefaults.cardColors(containerColor = cardColor),
|
colors = CardDefaults.cardColors(containerColor = cardColor),
|
||||||
@@ -770,13 +772,21 @@ private fun AppItem(
|
|||||||
horizontalArrangement = Arrangement.spacedBy(4.dp)
|
horizontalArrangement = Arrangement.spacedBy(4.dp)
|
||||||
) {
|
) {
|
||||||
if (app.allowSu) {
|
if (app.allowSu) {
|
||||||
LabelText(label = "ROOT", backgroundColor = MaterialTheme.colorScheme.primary)
|
LabelItem(text = "ROOT",)
|
||||||
}
|
}
|
||||||
if (Natives.uidShouldUmount(app.uid)) {
|
if (Natives.uidShouldUmount(app.uid)) {
|
||||||
LabelText(label = "UMOUNT", backgroundColor = MaterialTheme.colorScheme.tertiary)
|
LabelItem(text = "UNMOUNT", style = LabelItemDefaults.style.copy(
|
||||||
|
containerColor = MaterialTheme.colorScheme.secondaryContainer,
|
||||||
|
contentColor = MaterialTheme.colorScheme.onSecondaryContainer
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
if (app.hasCustomProfile) {
|
if (app.hasCustomProfile) {
|
||||||
LabelText(label = "CUSTOM", backgroundColor = MaterialTheme.colorScheme.secondary)
|
LabelItem(text = "CUSTOM", style = LabelItemDefaults.style.copy(
|
||||||
|
containerColor = MaterialTheme.colorScheme.onTertiary,
|
||||||
|
contentColor = MaterialTheme.colorScheme.onTertiaryContainer,
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.sukisu.ultra.ui.screen
|
package com.sukisu.ultra.ui.screen
|
||||||
|
|
||||||
import LabelText
|
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
@@ -232,7 +231,7 @@ private fun TopBar(
|
|||||||
colors: TopAppBarColors,
|
colors: TopAppBarColors,
|
||||||
scrollBehavior: TopAppBarScrollBehavior? = null
|
scrollBehavior: TopAppBarScrollBehavior? = null
|
||||||
) {
|
) {
|
||||||
val cardColor = MaterialTheme.colorScheme.surfaceVariant
|
val cardColor = MaterialTheme.colorScheme.surfaceContainerLow
|
||||||
val cardAlpha = CardConfig.cardAlpha
|
val cardAlpha = CardConfig.cardAlpha
|
||||||
|
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ object CardConfig {
|
|||||||
*/
|
*/
|
||||||
fun setDarkModeDefaults() {
|
fun setDarkModeDefaults() {
|
||||||
if (!isCustomAlphaSet) {
|
if (!isCustomAlphaSet) {
|
||||||
cardAlpha = 0.70f
|
cardAlpha = 1f
|
||||||
}
|
}
|
||||||
if (!isCustomDimSet) {
|
if (!isCustomDimSet) {
|
||||||
cardDim = 0.5f
|
cardDim = 0.5f
|
||||||
|
|||||||
@@ -3,260 +3,602 @@ package com.sukisu.ultra.ui.theme
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
|
||||||
sealed class ThemeColors {
|
sealed class ThemeColors {
|
||||||
abstract val Primary: Color
|
// 浅色
|
||||||
abstract val Secondary: Color
|
abstract val primaryLight: Color
|
||||||
abstract val Tertiary: Color
|
abstract val onPrimaryLight: Color
|
||||||
abstract val OnPrimary: Color
|
abstract val primaryContainerLight: Color
|
||||||
abstract val OnSecondary: Color
|
abstract val onPrimaryContainerLight: Color
|
||||||
abstract val OnTertiary: Color
|
abstract val secondaryLight: Color
|
||||||
abstract val PrimaryContainer: Color
|
abstract val onSecondaryLight: Color
|
||||||
abstract val SecondaryContainer: Color
|
abstract val secondaryContainerLight: Color
|
||||||
abstract val TertiaryContainer: Color
|
abstract val onSecondaryContainerLight: Color
|
||||||
abstract val OnPrimaryContainer: Color
|
abstract val tertiaryLight: Color
|
||||||
abstract val OnSecondaryContainer: Color
|
abstract val onTertiaryLight: Color
|
||||||
abstract val OnTertiaryContainer: Color
|
abstract val tertiaryContainerLight: Color
|
||||||
abstract val ButtonContrast: Color
|
abstract val onTertiaryContainerLight: Color
|
||||||
|
abstract val errorLight: Color
|
||||||
// 表面颜色
|
abstract val onErrorLight: Color
|
||||||
abstract val Surface: Color
|
abstract val errorContainerLight: Color
|
||||||
abstract val SurfaceVariant: Color
|
abstract val onErrorContainerLight: Color
|
||||||
abstract val OnSurface: Color
|
abstract val backgroundLight: Color
|
||||||
abstract val OnSurfaceVariant: Color
|
abstract val onBackgroundLight: Color
|
||||||
|
abstract val surfaceLight: Color
|
||||||
// 错误状态颜色
|
abstract val onSurfaceLight: Color
|
||||||
abstract val Error: Color
|
abstract val surfaceVariantLight: Color
|
||||||
abstract val OnError: Color
|
abstract val onSurfaceVariantLight: Color
|
||||||
abstract val ErrorContainer: Color
|
abstract val outlineLight: Color
|
||||||
abstract val OnErrorContainer: Color
|
abstract val outlineVariantLight: Color
|
||||||
|
abstract val scrimLight: Color
|
||||||
// 边框和背景色
|
abstract val inverseSurfaceLight: Color
|
||||||
abstract val Outline: Color
|
abstract val inverseOnSurfaceLight: Color
|
||||||
abstract val OutlineVariant: Color
|
abstract val inversePrimaryLight: Color
|
||||||
abstract val Background: Color
|
abstract val surfaceDimLight: Color
|
||||||
abstract val OnBackground: Color
|
abstract val surfaceBrightLight: Color
|
||||||
|
abstract val surfaceContainerLowestLight: Color
|
||||||
|
abstract val surfaceContainerLowLight: Color
|
||||||
|
abstract val surfaceContainerLight: Color
|
||||||
|
abstract val surfaceContainerHighLight: Color
|
||||||
|
abstract val surfaceContainerHighestLight: Color
|
||||||
|
// 深色
|
||||||
|
abstract val primaryDark: Color
|
||||||
|
abstract val onPrimaryDark: Color
|
||||||
|
abstract val primaryContainerDark: Color
|
||||||
|
abstract val onPrimaryContainerDark: Color
|
||||||
|
abstract val secondaryDark: Color
|
||||||
|
abstract val onSecondaryDark: Color
|
||||||
|
abstract val secondaryContainerDark: Color
|
||||||
|
abstract val onSecondaryContainerDark: Color
|
||||||
|
abstract val tertiaryDark: Color
|
||||||
|
abstract val onTertiaryDark: Color
|
||||||
|
abstract val tertiaryContainerDark: Color
|
||||||
|
abstract val onTertiaryContainerDark: Color
|
||||||
|
abstract val errorDark: Color
|
||||||
|
abstract val onErrorDark: Color
|
||||||
|
abstract val errorContainerDark: Color
|
||||||
|
abstract val onErrorContainerDark: Color
|
||||||
|
abstract val backgroundDark: Color
|
||||||
|
abstract val onBackgroundDark: Color
|
||||||
|
abstract val surfaceDark: Color
|
||||||
|
abstract val onSurfaceDark: Color
|
||||||
|
abstract val surfaceVariantDark: Color
|
||||||
|
abstract val onSurfaceVariantDark: Color
|
||||||
|
abstract val outlineDark: Color
|
||||||
|
abstract val outlineVariantDark: Color
|
||||||
|
abstract val scrimDark: Color
|
||||||
|
abstract val inverseSurfaceDark: Color
|
||||||
|
abstract val inverseOnSurfaceDark: Color
|
||||||
|
abstract val inversePrimaryDark: Color
|
||||||
|
abstract val surfaceDimDark: Color
|
||||||
|
abstract val surfaceBrightDark: Color
|
||||||
|
abstract val surfaceContainerLowestDark: Color
|
||||||
|
abstract val surfaceContainerLowDark: Color
|
||||||
|
abstract val surfaceContainerDark: Color
|
||||||
|
abstract val surfaceContainerHighDark: Color
|
||||||
|
abstract val surfaceContainerHighestDark: Color
|
||||||
|
|
||||||
// 默认主题 (蓝色)
|
// 默认主题 (蓝色)
|
||||||
object Default : ThemeColors() {
|
object Default : ThemeColors() {
|
||||||
override val Primary = Color(0xFF2196F3)
|
override val primaryLight = Color(0xFF415F91)
|
||||||
override val Secondary = Color(0xFF64B5F6)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF0D47A1)
|
override val primaryContainerLight = Color(0xFFD6E3FF)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF284777)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF565F71)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFD6EAFF)
|
override val secondaryContainerLight = Color(0xFFDAE2F9)
|
||||||
override val SecondaryContainer = Color(0xFFE3F2FD)
|
override val onSecondaryContainerLight = Color(0xFF3E4759)
|
||||||
override val TertiaryContainer = Color(0xFFCFD8DC)
|
override val tertiaryLight = Color(0xFF705575)
|
||||||
override val OnPrimaryContainer = Color(0xFF0A3049)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF0D3C61)
|
override val tertiaryContainerLight = Color(0xFFFAD8FD)
|
||||||
override val OnTertiaryContainer = Color(0xFF071D41)
|
override val onTertiaryContainerLight = Color(0xFF573E5C)
|
||||||
override val ButtonContrast = Color(0xFF2196F3)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFF9F9FF)
|
||||||
|
override val onBackgroundLight = Color(0xFF191C20)
|
||||||
|
override val surfaceLight = Color(0xFFF9F9FF)
|
||||||
|
override val onSurfaceLight = Color(0xFF191C20)
|
||||||
|
override val surfaceVariantLight = Color(0xFFE0E2EC)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF44474E)
|
||||||
|
override val outlineLight = Color(0xFF74777F)
|
||||||
|
override val outlineVariantLight = Color(0xFFC4C6D0)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF2E3036)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF0F0F7)
|
||||||
|
override val inversePrimaryLight = Color(0xFFAAC7FF)
|
||||||
|
override val surfaceDimLight = Color(0xFFD9D9E0)
|
||||||
|
override val surfaceBrightLight = Color(0xFFF9F9FF)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFF3F3FA)
|
||||||
|
override val surfaceContainerLight = Color(0xFFEDEDF4)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFE7E8EE)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFE2E2E9)
|
||||||
|
|
||||||
override val Surface = Color(0xFFF5F9FF)
|
override val primaryDark = Color(0xFFAAC7FF)
|
||||||
override val SurfaceVariant = Color(0xFFEDF5FE)
|
override val onPrimaryDark = Color(0xFF0A305F)
|
||||||
override val OnSurface = Color(0xFF1A1C1E)
|
override val primaryContainerDark = Color(0xFF284777)
|
||||||
override val OnSurfaceVariant = Color(0xFF42474E)
|
override val onPrimaryContainerDark = Color(0xFFD6E3FF)
|
||||||
|
override val secondaryDark = Color(0xFFBEC6DC)
|
||||||
override val Error = Color(0xFFB00020)
|
override val onSecondaryDark = Color(0xFF283141)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF3E4759)
|
||||||
override val ErrorContainer = Color(0xFFFDE7E9)
|
override val onSecondaryContainerDark = Color(0xFFDAE2F9)
|
||||||
override val OnErrorContainer = Color(0xFF410008)
|
override val tertiaryDark = Color(0xFFDDBCE0)
|
||||||
|
override val onTertiaryDark = Color(0xFF3F2844)
|
||||||
override val Outline = Color(0xFFBAC3CF)
|
override val tertiaryContainerDark = Color(0xFF573E5C)
|
||||||
override val OutlineVariant = Color(0xFFDFE3EB)
|
override val onTertiaryContainerDark = Color(0xFFFAD8FD)
|
||||||
override val Background = Color(0xFFFAFCFF)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF1A1C1E)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF111318)
|
||||||
|
override val onBackgroundDark = Color(0xFFE2E2E9)
|
||||||
|
override val surfaceDark = Color(0xFF111318)
|
||||||
|
override val onSurfaceDark = Color(0xFFE2E2E9)
|
||||||
|
override val surfaceVariantDark = Color(0xFF44474E)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFC4C6D0)
|
||||||
|
override val outlineDark = Color(0xFF8E9099)
|
||||||
|
override val outlineVariantDark = Color(0xFF44474E)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFE2E2E9)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF2E3036)
|
||||||
|
override val inversePrimaryDark = Color(0xFF415F91)
|
||||||
|
override val surfaceDimDark = Color(0xFF111318)
|
||||||
|
override val surfaceBrightDark = Color(0xFF37393E)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF0C0E13)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF191C20)
|
||||||
|
override val surfaceContainerDark = Color(0xFF1D2024)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF282A2F)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF33353A)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 绿色主题
|
// 绿色主题
|
||||||
object Green : ThemeColors() {
|
object Green : ThemeColors() {
|
||||||
override val Primary = Color(0xFF43A047)
|
override val primaryLight = Color(0xFF4C662B)
|
||||||
override val Secondary = Color(0xFF66BB6A)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF1B5E20)
|
override val primaryContainerLight = Color(0xFFCDEDA3)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF354E16)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF586249)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFD8EFDB)
|
override val secondaryContainerLight = Color(0xFFDCE7C8)
|
||||||
override val SecondaryContainer = Color(0xFFE8F5E9)
|
override val onSecondaryContainerLight = Color(0xFF404A33)
|
||||||
override val TertiaryContainer = Color(0xFFB9F6CA)
|
override val tertiaryLight = Color(0xFF386663)
|
||||||
override val OnPrimaryContainer = Color(0xFF0A280D)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF0E2912)
|
override val tertiaryContainerLight = Color(0xFFBCECE7)
|
||||||
override val OnTertiaryContainer = Color(0xFF051B07)
|
override val onTertiaryContainerLight = Color(0xFF1F4E4B)
|
||||||
override val ButtonContrast = Color(0xFF43A047)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFF9FAEF)
|
||||||
|
override val onBackgroundLight = Color(0xFF1A1C16)
|
||||||
|
override val surfaceLight = Color(0xFFF9FAEF)
|
||||||
|
override val onSurfaceLight = Color(0xFF1A1C16)
|
||||||
|
override val surfaceVariantLight = Color(0xFFE1E4D5)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF44483D)
|
||||||
|
override val outlineLight = Color(0xFF75796C)
|
||||||
|
override val outlineVariantLight = Color(0xFFC5C8BA)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF2F312A)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF1F2E6)
|
||||||
|
override val inversePrimaryLight = Color(0xFFB1D18A)
|
||||||
|
override val surfaceDimLight = Color(0xFFDADBD0)
|
||||||
|
override val surfaceBrightLight = Color(0xFFF9FAEF)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFF3F4E9)
|
||||||
|
override val surfaceContainerLight = Color(0xFFEEEFE3)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFE8E9DE)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFE2E3D8)
|
||||||
|
|
||||||
override val Surface = Color(0xFFF6FBF6)
|
override val primaryDark = Color(0xFFB1D18A)
|
||||||
override val SurfaceVariant = Color(0xFFEDF7EE)
|
override val onPrimaryDark = Color(0xFF1F3701)
|
||||||
override val OnSurface = Color(0xFF191C19)
|
override val primaryContainerDark = Color(0xFF354E16)
|
||||||
override val OnSurfaceVariant = Color(0xFF414941)
|
override val onPrimaryContainerDark = Color(0xFFCDEDA3)
|
||||||
|
override val secondaryDark = Color(0xFFBFCBAD)
|
||||||
override val Error = Color(0xFFC62828)
|
override val onSecondaryDark = Color(0xFF2A331E)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF404A33)
|
||||||
override val ErrorContainer = Color(0xFFF8D7DA)
|
override val onSecondaryContainerDark = Color(0xFFDCE7C8)
|
||||||
override val OnErrorContainer = Color(0xFF4A0808)
|
override val tertiaryDark = Color(0xFFA0D0CB)
|
||||||
|
override val onTertiaryDark = Color(0xFF003735)
|
||||||
override val Outline = Color(0xFFBDC9BF)
|
override val tertiaryContainerDark = Color(0xFF1F4E4B)
|
||||||
override val OutlineVariant = Color(0xFFDDE6DE)
|
override val onTertiaryContainerDark = Color(0xFFBCECE7)
|
||||||
override val Background = Color(0xFFFBFDFB)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF191C19)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF12140E)
|
||||||
|
override val onBackgroundDark = Color(0xFFE2E3D8)
|
||||||
|
override val surfaceDark = Color(0xFF12140E)
|
||||||
|
override val onSurfaceDark = Color(0xFFE2E3D8)
|
||||||
|
override val surfaceVariantDark = Color(0xFF44483D)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFC5C8BA)
|
||||||
|
override val outlineDark = Color(0xFF8F9285)
|
||||||
|
override val outlineVariantDark = Color(0xFF44483D)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFE2E3D8)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF2F312A)
|
||||||
|
override val inversePrimaryDark = Color(0xFF4C662B)
|
||||||
|
override val surfaceDimDark = Color(0xFF12140E)
|
||||||
|
override val surfaceBrightDark = Color(0xFF383A32)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF0C0F09)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF1A1C16)
|
||||||
|
override val surfaceContainerDark = Color(0xFF1E201A)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF282B24)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF33362E)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 紫色主题
|
// 紫色主题
|
||||||
object Purple : ThemeColors() {
|
object Purple : ThemeColors() {
|
||||||
override val Primary = Color(0xFF9C27B0)
|
override val primaryLight = Color(0xFF7C4E7E)
|
||||||
override val Secondary = Color(0xFFBA68C8)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF6A1B9A)
|
override val primaryContainerLight = Color(0xFFFFD6FC)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF623765)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF6C586B)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFF3D8F8)
|
override val secondaryContainerLight = Color(0xFFF5DBF1)
|
||||||
override val SecondaryContainer = Color(0xFFF5E9F7)
|
override val onSecondaryContainerLight = Color(0xFF534152)
|
||||||
override val TertiaryContainer = Color(0xFFE1BEE7)
|
override val tertiaryLight = Color(0xFF825249)
|
||||||
override val OnPrimaryContainer = Color(0xFF2A0934)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF3C0F50)
|
override val tertiaryContainerLight = Color(0xFFFFDAD4)
|
||||||
override val OnTertiaryContainer = Color(0xFF1D0830)
|
override val onTertiaryContainerLight = Color(0xFF673B33)
|
||||||
override val ButtonContrast = Color(0xFF9C27B0)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFFF7FA)
|
||||||
|
override val onBackgroundLight = Color(0xFF1F1A1F)
|
||||||
|
override val surfaceLight = Color(0xFFFFF7FA)
|
||||||
|
override val onSurfaceLight = Color(0xFF1F1A1F)
|
||||||
|
override val surfaceVariantLight = Color(0xFFEDDFE8)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF4D444C)
|
||||||
|
override val outlineLight = Color(0xFF7F747C)
|
||||||
|
override val outlineVariantLight = Color(0xFFD0C3CC)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF352F34)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF9EEF4)
|
||||||
|
override val inversePrimaryLight = Color(0xFFECB4EC)
|
||||||
|
override val surfaceDimLight = Color(0xFFE2D7DE)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFFF7FA)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFFCF0F7)
|
||||||
|
override val surfaceContainerLight = Color(0xFFF6EBF2)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFF0E5EC)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFEBDFE6)
|
||||||
|
|
||||||
override val Surface = Color(0xFFFCF6FF)
|
override val primaryDark = Color(0xFFECB4EC)
|
||||||
override val SurfaceVariant = Color(0xFFF5EEFA)
|
override val onPrimaryDark = Color(0xFF49204D)
|
||||||
override val OnSurface = Color(0xFF1D1B1E)
|
override val primaryContainerDark = Color(0xFF623765)
|
||||||
override val OnSurfaceVariant = Color(0xFF49454E)
|
override val onPrimaryContainerDark = Color(0xFFFFD6FC)
|
||||||
|
override val secondaryDark = Color(0xFFD8BFD5)
|
||||||
override val Error = Color(0xFFD50000)
|
override val onSecondaryDark = Color(0xFF3B2B3B)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF534152)
|
||||||
override val ErrorContainer = Color(0xFFFFDCD5)
|
override val onSecondaryContainerDark = Color(0xFFF5DBF1)
|
||||||
override val OnErrorContainer = Color(0xFF480000)
|
override val tertiaryDark = Color(0xFFF6B8AD)
|
||||||
|
override val onTertiaryDark = Color(0xFF4C251F)
|
||||||
override val Outline = Color(0xFFC9B9D0)
|
override val tertiaryContainerDark = Color(0xFF673B33)
|
||||||
override val OutlineVariant = Color(0xFFE8DAED)
|
override val onTertiaryContainerDark = Color(0xFFFFDAD4)
|
||||||
override val Background = Color(0xFFFFFBFF)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF1D1B1E)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF171216)
|
||||||
|
override val onBackgroundDark = Color(0xFFEBDFE6)
|
||||||
|
override val surfaceDark = Color(0xFF171216)
|
||||||
|
override val onSurfaceDark = Color(0xFFEBDFE6)
|
||||||
|
override val surfaceVariantDark = Color(0xFF4D444C)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFD0C3CC)
|
||||||
|
override val outlineDark = Color(0xFF998D96)
|
||||||
|
override val outlineVariantDark = Color(0xFF4D444C)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFEBDFE6)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF352F34)
|
||||||
|
override val inversePrimaryDark = Color(0xFF7C4E7E)
|
||||||
|
override val surfaceDimDark = Color(0xFF171216)
|
||||||
|
override val surfaceBrightDark = Color(0xFF3E373D)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF110D11)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF1F1A1F)
|
||||||
|
override val surfaceContainerDark = Color(0xFF231E23)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF2E282D)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF393338)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 橙色主题
|
// 橙色主题
|
||||||
object Orange : ThemeColors() {
|
object Orange : ThemeColors() {
|
||||||
override val Primary = Color(0xFFFF9800)
|
override val primaryLight = Color(0xFF8B4F24)
|
||||||
override val Secondary = Color(0xFFFFB74D)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFFE65100)
|
override val primaryContainerLight = Color(0xFFFFDCC7)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF6E390E)
|
||||||
override val OnSecondary = Color(0xFF000000)
|
override val secondaryLight = Color(0xFF755846)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFFFECCC)
|
override val secondaryContainerLight = Color(0xFFFFDCC7)
|
||||||
override val SecondaryContainer = Color(0xFFFFF0D9)
|
override val onSecondaryContainerLight = Color(0xFF5B4130)
|
||||||
override val TertiaryContainer = Color(0xFFFFD180)
|
override val tertiaryLight = Color(0xFF865219)
|
||||||
override val OnPrimaryContainer = Color(0xFF351F00)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF3D2800)
|
override val tertiaryContainerLight = Color(0xFFFFDCBF)
|
||||||
override val OnTertiaryContainer = Color(0xFF2E1500)
|
override val onTertiaryContainerLight = Color(0xFF6A3B01)
|
||||||
override val ButtonContrast = Color(0xFFFF9800)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFFF8F5)
|
||||||
|
override val onBackgroundLight = Color(0xFF221A15)
|
||||||
|
override val surfaceLight = Color(0xFFFFF8F5)
|
||||||
|
override val onSurfaceLight = Color(0xFF221A15)
|
||||||
|
override val surfaceVariantLight = Color(0xFFF4DED3)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF52443C)
|
||||||
|
override val outlineLight = Color(0xFF84746A)
|
||||||
|
override val outlineVariantLight = Color(0xFFD7C3B8)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF382E29)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFFFEDE5)
|
||||||
|
override val inversePrimaryLight = Color(0xFFFFB787)
|
||||||
|
override val surfaceDimLight = Color(0xFFE7D7CE)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFFF8F5)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFFFF1EA)
|
||||||
|
override val surfaceContainerLight = Color(0xFFFCEBE2)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFF6E5DC)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFF0DFD7)
|
||||||
|
|
||||||
override val Surface = Color(0xFFFFF8F3)
|
override val primaryDark = Color(0xFFFFB787)
|
||||||
override val SurfaceVariant = Color(0xFFFFF0E6)
|
override val onPrimaryDark = Color(0xFF502400)
|
||||||
override val OnSurface = Color(0xFF1F1B16)
|
override val primaryContainerDark = Color(0xFF6E390E)
|
||||||
override val OnSurfaceVariant = Color(0xFF4E4639)
|
override val onPrimaryContainerDark = Color(0xFFFFDCC7)
|
||||||
|
override val secondaryDark = Color(0xFFE5BFA8)
|
||||||
override val Error = Color(0xFFD32F2F)
|
override val onSecondaryDark = Color(0xFF422B1B)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF5B4130)
|
||||||
override val ErrorContainer = Color(0xFFFFDBC8)
|
override val onSecondaryContainerDark = Color(0xFFFFDCC7)
|
||||||
override val OnErrorContainer = Color(0xFF490700)
|
override val tertiaryDark = Color(0xFFFDB876)
|
||||||
|
override val onTertiaryDark = Color(0xFF4B2800)
|
||||||
override val Outline = Color(0xFFD6C3AD)
|
override val tertiaryContainerDark = Color(0xFF6A3B01)
|
||||||
override val OutlineVariant = Color(0xFFEFDFCC)
|
override val onTertiaryContainerDark = Color(0xFFFFDCBF)
|
||||||
override val Background = Color(0xFFFFFBFF)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF1F1B16)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF19120D)
|
||||||
|
override val onBackgroundDark = Color(0xFFF0DFD7)
|
||||||
|
override val surfaceDark = Color(0xFF19120D)
|
||||||
|
override val onSurfaceDark = Color(0xFFF0DFD7)
|
||||||
|
override val surfaceVariantDark = Color(0xFF52443C)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFD7C3B8)
|
||||||
|
override val outlineDark = Color(0xFF9F8D83)
|
||||||
|
override val outlineVariantDark = Color(0xFF52443C)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFF0DFD7)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF382E29)
|
||||||
|
override val inversePrimaryDark = Color(0xFF8B4F24)
|
||||||
|
override val surfaceDimDark = Color(0xFF19120D)
|
||||||
|
override val surfaceBrightDark = Color(0xFF413731)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF140D08)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF221A15)
|
||||||
|
override val surfaceContainerDark = Color(0xFF261E19)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF312823)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF3D332D)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 粉色主题
|
// 粉色主题
|
||||||
object Pink : ThemeColors() {
|
object Pink : ThemeColors() {
|
||||||
override val Primary = Color(0xFFE91E63)
|
override val primaryLight = Color(0xFF8C4A60)
|
||||||
override val Secondary = Color(0xFFF06292)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF880E4F)
|
override val primaryContainerLight = Color(0xFFFFD9E2)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFF703348)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF8B4A62)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFFCE4EC)
|
override val secondaryContainerLight = Color(0xFFFFD9E3)
|
||||||
override val SecondaryContainer = Color(0xFFFCE4EC)
|
override val onSecondaryContainerLight = Color(0xFF6F334B)
|
||||||
override val TertiaryContainer = Color(0xFFF8BBD0)
|
override val tertiaryLight = Color(0xFF8B4A62)
|
||||||
override val OnPrimaryContainer = Color(0xFF3B0819)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF3B0819)
|
override val tertiaryContainerLight = Color(0xFFFFD9E3)
|
||||||
override val OnTertiaryContainer = Color(0xFF2B0516)
|
override val onTertiaryContainerLight = Color(0xFF6F334B)
|
||||||
override val ButtonContrast = Color(0xFFE91E63)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFFF8F8)
|
||||||
|
override val onBackgroundLight = Color(0xFF22191B)
|
||||||
|
override val surfaceLight = Color(0xFFFFF8F8)
|
||||||
|
override val onSurfaceLight = Color(0xFF22191B)
|
||||||
|
override val surfaceVariantLight = Color(0xFFF2DDE1)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF514346)
|
||||||
|
override val outlineLight = Color(0xFF837377)
|
||||||
|
override val outlineVariantLight = Color(0xFFD5C2C5)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF372E30)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFFDEDEF)
|
||||||
|
override val inversePrimaryLight = Color(0xFFFFB1C7)
|
||||||
|
override val surfaceDimLight = Color(0xFFE6D6D9)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFFF8F8)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFFFF0F2)
|
||||||
|
override val surfaceContainerLight = Color(0xFFFBEAED)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFF5E4E7)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFEFDFE1)
|
||||||
|
|
||||||
override val Surface = Color(0xFFFFF7F9)
|
override val primaryDark = Color(0xFFFFB1C7)
|
||||||
override val SurfaceVariant = Color(0xFFFCEEF2)
|
override val onPrimaryDark = Color(0xFF541D32)
|
||||||
override val OnSurface = Color(0xFF201A1C)
|
override val primaryContainerDark = Color(0xFF703348)
|
||||||
override val OnSurfaceVariant = Color(0xFF534347)
|
override val onPrimaryContainerDark = Color(0xFFFFD9E2)
|
||||||
|
override val secondaryDark = Color(0xFFFFB0CB)
|
||||||
override val Error = Color(0xFFB71C1C)
|
override val onSecondaryDark = Color(0xFF541D34)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF6F334B)
|
||||||
override val ErrorContainer = Color(0xFFFFDAD6)
|
override val onSecondaryContainerDark = Color(0xFFFFD9E3)
|
||||||
override val OnErrorContainer = Color(0xFF410002)
|
override val tertiaryDark = Color(0xFFFFB0CB)
|
||||||
|
override val onTertiaryDark = Color(0xFF541D34)
|
||||||
override val Outline = Color(0xFFD6BABF)
|
override val tertiaryContainerDark = Color(0xFF6F334B)
|
||||||
override val OutlineVariant = Color(0xFFEFDDE0)
|
override val onTertiaryContainerDark = Color(0xFFFFD9E3)
|
||||||
override val Background = Color(0xFFFFFBFF)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF201A1C)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF191113)
|
||||||
|
override val onBackgroundDark = Color(0xFFEFDFE1)
|
||||||
|
override val surfaceDark = Color(0xFF191113)
|
||||||
|
override val onSurfaceDark = Color(0xFFEFDFE1)
|
||||||
|
override val surfaceVariantDark = Color(0xFF514346)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFD5C2C5)
|
||||||
|
override val outlineDark = Color(0xFF9E8C90)
|
||||||
|
override val outlineVariantDark = Color(0xFF514346)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFEFDFE1)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF372E30)
|
||||||
|
override val inversePrimaryDark = Color(0xFF8C4A60)
|
||||||
|
override val surfaceDimDark = Color(0xFF191113)
|
||||||
|
override val surfaceBrightDark = Color(0xFF413739)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF140C0E)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF22191B)
|
||||||
|
override val surfaceContainerDark = Color(0xFF261D1F)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF31282A)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF3C3234)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 灰色主题
|
// 灰色主题
|
||||||
object Gray : ThemeColors() {
|
object Gray : ThemeColors() {
|
||||||
override val Primary = Color(0xFF607D8B)
|
override val primaryLight = Color(0xFF5B5C5C)
|
||||||
override val Secondary = Color(0xFF90A4AE)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFF455A64)
|
override val primaryContainerLight = Color(0xFF747474)
|
||||||
override val OnPrimary = Color(0xFFFFFFFF)
|
override val onPrimaryContainerLight = Color(0xFFFEFCFC)
|
||||||
override val OnSecondary = Color(0xFFFFFFFF)
|
override val secondaryLight = Color(0xFF5F5E5E)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFECEFF1)
|
override val secondaryContainerLight = Color(0xFFE4E2E1)
|
||||||
override val SecondaryContainer = Color(0xFFECEFF1)
|
override val onSecondaryContainerLight = Color(0xFF656464)
|
||||||
override val TertiaryContainer = Color(0xFFCFD8DC)
|
override val tertiaryLight = Color(0xFF5E5B5D)
|
||||||
override val OnPrimaryContainer = Color(0xFF1A2327)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF1A2327)
|
override val tertiaryContainerLight = Color(0xFF777375)
|
||||||
override val OnTertiaryContainer = Color(0xFF121A1D)
|
override val onTertiaryContainerLight = Color(0xFFFFFBFF)
|
||||||
override val ButtonContrast = Color(0xFF607D8B)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFCF8F8)
|
||||||
|
override val onBackgroundLight = Color(0xFF1C1B1B)
|
||||||
|
override val surfaceLight = Color(0xFFFCF8F8)
|
||||||
|
override val onSurfaceLight = Color(0xFF1C1B1B)
|
||||||
|
override val surfaceVariantLight = Color(0xFFE0E3E3)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF444748)
|
||||||
|
override val outlineLight = Color(0xFF747878)
|
||||||
|
override val outlineVariantLight = Color(0xFFC4C7C7)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF313030)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF4F0EF)
|
||||||
|
override val inversePrimaryLight = Color(0xFFC7C6C6)
|
||||||
|
override val surfaceDimLight = Color(0xFFDDD9D8)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFCF8F8)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFF7F3F2)
|
||||||
|
override val surfaceContainerLight = Color(0xFFF1EDEC)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFEBE7E7)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFE5E2E1)
|
||||||
|
|
||||||
override val Surface = Color(0xFFF6F9FB)
|
override val primaryDark = Color(0xFFC7C6C6)
|
||||||
override val SurfaceVariant = Color(0xFFEEF2F4)
|
override val onPrimaryDark = Color(0xFF303031)
|
||||||
override val OnSurface = Color(0xFF191C1E)
|
override val primaryContainerDark = Color(0xFF919190)
|
||||||
override val OnSurfaceVariant = Color(0xFF41484D)
|
override val onPrimaryContainerDark = Color(0xFF161718)
|
||||||
|
override val secondaryDark = Color(0xFFC8C6C5)
|
||||||
override val Error = Color(0xFFC62828)
|
override val onSecondaryDark = Color(0xFF303030)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF474746)
|
||||||
override val ErrorContainer = Color(0xFFFFDAD6)
|
override val onSecondaryContainerDark = Color(0xFFB7B5B4)
|
||||||
override val OnErrorContainer = Color(0xFF410002)
|
override val tertiaryDark = Color(0xFFCAC5C7)
|
||||||
|
override val onTertiaryDark = Color(0xFF323031)
|
||||||
override val Outline = Color(0xFFBDC1C4)
|
override val tertiaryContainerDark = Color(0xFF948F91)
|
||||||
override val OutlineVariant = Color(0xFFDDE1E3)
|
override val onTertiaryContainerDark = Color(0xFF181718)
|
||||||
override val Background = Color(0xFFFBFCFE)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF191C1E)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF141313)
|
||||||
|
override val onBackgroundDark = Color(0xFFE5E2E1)
|
||||||
|
override val surfaceDark = Color(0xFF141313)
|
||||||
|
override val onSurfaceDark = Color(0xFFE5E2E1)
|
||||||
|
override val surfaceVariantDark = Color(0xFF444748)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFC4C7C7)
|
||||||
|
override val outlineDark = Color(0xFF8E9192)
|
||||||
|
override val outlineVariantDark = Color(0xFF444748)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFE5E2E1)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF313030)
|
||||||
|
override val inversePrimaryDark = Color(0xFF5E5E5E)
|
||||||
|
override val surfaceDimDark = Color(0xFF141313)
|
||||||
|
override val surfaceBrightDark = Color(0xFF3A3939)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF0E0E0E)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF1C1B1B)
|
||||||
|
override val surfaceContainerDark = Color(0xFF201F1F)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF2A2A2A)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF353434)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 黄色主题
|
// 黄色主题
|
||||||
object Yellow : ThemeColors() {
|
object Yellow : ThemeColors() {
|
||||||
override val Primary = Color(0xFFFFC107)
|
override val primaryLight = Color(0xFF6D5E0F)
|
||||||
override val Secondary = Color(0xFFFFD54F)
|
override val onPrimaryLight = Color(0xFFFFFFFF)
|
||||||
override val Tertiary = Color(0xFFFF8F00)
|
override val primaryContainerLight = Color(0xFFF8E288)
|
||||||
override val OnPrimary = Color(0xFF000000)
|
override val onPrimaryContainerLight = Color(0xFF534600)
|
||||||
override val OnSecondary = Color(0xFF000000)
|
override val secondaryLight = Color(0xFF6D5E0F)
|
||||||
override val OnTertiary = Color(0xFFFFFFFF)
|
override val onSecondaryLight = Color(0xFFFFFFFF)
|
||||||
override val PrimaryContainer = Color(0xFFFFF8E1)
|
override val secondaryContainerLight = Color(0xFFF7E388)
|
||||||
override val SecondaryContainer = Color(0xFFFFF8E1)
|
override val onSecondaryContainerLight = Color(0xFF534600)
|
||||||
override val TertiaryContainer = Color(0xFFFFECB3)
|
override val tertiaryLight = Color(0xFF685F13)
|
||||||
override val OnPrimaryContainer = Color(0xFF332A00)
|
override val onTertiaryLight = Color(0xFFFFFFFF)
|
||||||
override val OnSecondaryContainer = Color(0xFF332A00)
|
override val tertiaryContainerLight = Color(0xFFF1E58A)
|
||||||
override val OnTertiaryContainer = Color(0xFF221200)
|
override val onTertiaryContainerLight = Color(0xFF4F4800)
|
||||||
override val ButtonContrast = Color(0xFFFFC107)
|
override val errorLight = Color(0xFFBA1A1A)
|
||||||
|
override val onErrorLight = Color(0xFFFFFFFF)
|
||||||
|
override val errorContainerLight = Color(0xFFFFDAD6)
|
||||||
|
override val onErrorContainerLight = Color(0xFF93000A)
|
||||||
|
override val backgroundLight = Color(0xFFFFF9ED)
|
||||||
|
override val onBackgroundLight = Color(0xFF1E1C13)
|
||||||
|
override val surfaceLight = Color(0xFFFFF9ED)
|
||||||
|
override val onSurfaceLight = Color(0xFF1E1C13)
|
||||||
|
override val surfaceVariantLight = Color(0xFFE9E2D0)
|
||||||
|
override val onSurfaceVariantLight = Color(0xFF4B4739)
|
||||||
|
override val outlineLight = Color(0xFF7C7768)
|
||||||
|
override val outlineVariantLight = Color(0xFFCDC6B4)
|
||||||
|
override val scrimLight = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceLight = Color(0xFF333027)
|
||||||
|
override val inverseOnSurfaceLight = Color(0xFFF7F0E2)
|
||||||
|
override val inversePrimaryLight = Color(0xFFDAC66F)
|
||||||
|
override val surfaceDimLight = Color(0xFFE0D9CC)
|
||||||
|
override val surfaceBrightLight = Color(0xFFFFF9ED)
|
||||||
|
override val surfaceContainerLowestLight = Color(0xFFFFFFFF)
|
||||||
|
override val surfaceContainerLowLight = Color(0xFFFAF3E5)
|
||||||
|
override val surfaceContainerLight = Color(0xFFF4EDDF)
|
||||||
|
override val surfaceContainerHighLight = Color(0xFFEEE8DA)
|
||||||
|
override val surfaceContainerHighestLight = Color(0xFFE8E2D4)
|
||||||
|
|
||||||
override val Surface = Color(0xFFFFFAF3)
|
override val primaryDark = Color(0xFFDAC66F)
|
||||||
override val SurfaceVariant = Color(0xFFFFF7E6)
|
override val onPrimaryDark = Color(0xFF393000)
|
||||||
override val OnSurface = Color(0xFF1F1C17)
|
override val primaryContainerDark = Color(0xFF534600)
|
||||||
override val OnSurfaceVariant = Color(0xFF4E4A3C)
|
override val onPrimaryContainerDark = Color(0xFFF8E288)
|
||||||
|
override val secondaryDark = Color(0xFFDAC76F)
|
||||||
override val Error = Color(0xFFB71C1C)
|
override val onSecondaryDark = Color(0xFF393000)
|
||||||
override val OnError = Color(0xFFFFFFFF)
|
override val secondaryContainerDark = Color(0xFF534600)
|
||||||
override val ErrorContainer = Color(0xFFFFDAD6)
|
override val onSecondaryContainerDark = Color(0xFFF7E388)
|
||||||
override val OnErrorContainer = Color(0xFF410002)
|
override val tertiaryDark = Color(0xFFD4C871)
|
||||||
|
override val onTertiaryDark = Color(0xFF363100)
|
||||||
override val Outline = Color(0xFFD1C8AF)
|
override val tertiaryContainerDark = Color(0xFF4F4800)
|
||||||
override val OutlineVariant = Color(0xFFEEE8D7)
|
override val onTertiaryContainerDark = Color(0xFFF1E58A)
|
||||||
override val Background = Color(0xFFFFFCF8)
|
override val errorDark = Color(0xFFFFB4AB)
|
||||||
override val OnBackground = Color(0xFF1F1C17)
|
override val onErrorDark = Color(0xFF690005)
|
||||||
|
override val errorContainerDark = Color(0xFF93000A)
|
||||||
|
override val onErrorContainerDark = Color(0xFFFFDAD6)
|
||||||
|
override val backgroundDark = Color(0xFF15130B)
|
||||||
|
override val onBackgroundDark = Color(0xFFE8E2D4)
|
||||||
|
override val surfaceDark = Color(0xFF15130B)
|
||||||
|
override val onSurfaceDark = Color(0xFFE8E2D4)
|
||||||
|
override val surfaceVariantDark = Color(0xFF4B4739)
|
||||||
|
override val onSurfaceVariantDark = Color(0xFFCDC6B4)
|
||||||
|
override val outlineDark = Color(0xFF969080)
|
||||||
|
override val outlineVariantDark = Color(0xFF4B4739)
|
||||||
|
override val scrimDark = Color(0xFF000000)
|
||||||
|
override val inverseSurfaceDark = Color(0xFFE8E2D4)
|
||||||
|
override val inverseOnSurfaceDark = Color(0xFF333027)
|
||||||
|
override val inversePrimaryDark = Color(0xFF6D5E0F)
|
||||||
|
override val surfaceDimDark = Color(0xFF15130B)
|
||||||
|
override val surfaceBrightDark = Color(0xFF3C3930)
|
||||||
|
override val surfaceContainerLowestDark = Color(0xFF100E07)
|
||||||
|
override val surfaceContainerLowDark = Color(0xFF1E1C13)
|
||||||
|
override val surfaceContainerDark = Color(0xFF222017)
|
||||||
|
override val surfaceContainerHighDark = Color(0xFF2C2A21)
|
||||||
|
override val surfaceContainerHighestDark = Color(0xFF37352B)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ fun KernelSUTheme(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.zIndex(-2f)
|
.zIndex(-2f)
|
||||||
.background(if (darkTheme) Color.Black else Color.White)
|
.background(if (darkTheme) MaterialTheme.colorScheme.surfaceContainerLow else MaterialTheme.colorScheme.surfaceContainerLow)
|
||||||
)
|
)
|
||||||
|
|
||||||
// 自定义背景层
|
// 自定义背景层
|
||||||
@@ -311,30 +311,41 @@ private fun createDynamicLightColorScheme(context: Context) =
|
|||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
private fun createDarkColorScheme() = darkColorScheme(
|
private fun createDarkColorScheme() = darkColorScheme(
|
||||||
primary = ThemeConfig.currentTheme.Primary.copy(alpha = 0.8f),
|
primary = ThemeConfig.currentTheme.primaryDark,
|
||||||
onPrimary = Color.White,
|
onPrimary = ThemeConfig.currentTheme.onPrimaryDark,
|
||||||
primaryContainer = ThemeConfig.currentTheme.PrimaryContainer.copy(alpha = 0.15f),
|
primaryContainer = ThemeConfig.currentTheme.primaryContainerDark,
|
||||||
onPrimaryContainer = Color.White,
|
onPrimaryContainer = ThemeConfig.currentTheme.onPrimaryContainerDark,
|
||||||
secondary = ThemeConfig.currentTheme.Secondary.copy(alpha = 0.8f),
|
secondary = ThemeConfig.currentTheme.secondaryDark,
|
||||||
onSecondary = Color.White,
|
onSecondary = ThemeConfig.currentTheme.onSecondaryDark,
|
||||||
secondaryContainer = ThemeConfig.currentTheme.SecondaryContainer.copy(alpha = 0.15f),
|
secondaryContainer = ThemeConfig.currentTheme.secondaryContainerDark,
|
||||||
onSecondaryContainer = Color.White,
|
onSecondaryContainer = ThemeConfig.currentTheme.onSecondaryContainerDark,
|
||||||
tertiary = ThemeConfig.currentTheme.Tertiary.copy(alpha = 0.8f),
|
tertiary = ThemeConfig.currentTheme.tertiaryDark,
|
||||||
onTertiary = Color.White,
|
onTertiary = ThemeConfig.currentTheme.onTertiaryDark,
|
||||||
tertiaryContainer = ThemeConfig.currentTheme.TertiaryContainer.copy(alpha = 0.15f),
|
tertiaryContainer = ThemeConfig.currentTheme.tertiaryContainerDark,
|
||||||
onTertiaryContainer = Color.White,
|
onTertiaryContainer = ThemeConfig.currentTheme.onTertiaryContainerDark,
|
||||||
|
error = ThemeConfig.currentTheme.errorDark,
|
||||||
|
onError = ThemeConfig.currentTheme.onErrorDark,
|
||||||
|
errorContainer = ThemeConfig.currentTheme.errorContainerDark,
|
||||||
|
onErrorContainer = ThemeConfig.currentTheme.onErrorContainerDark,
|
||||||
background = Color.Transparent,
|
background = Color.Transparent,
|
||||||
|
onBackground = ThemeConfig.currentTheme.onBackgroundDark,
|
||||||
surface = Color.Transparent,
|
surface = Color.Transparent,
|
||||||
onBackground = Color.White,
|
onSurface = ThemeConfig.currentTheme.onSurfaceDark,
|
||||||
onSurface = Color.White,
|
surfaceVariant = ThemeConfig.currentTheme.surfaceVariantDark,
|
||||||
surfaceVariant = Color(0xFF2F2F2F),
|
onSurfaceVariant = ThemeConfig.currentTheme.onSurfaceVariantDark,
|
||||||
onSurfaceVariant = Color.White.copy(alpha = 0.7f),
|
outline = ThemeConfig.currentTheme.outlineDark,
|
||||||
outline = Color.White.copy(alpha = 0.12f),
|
outlineVariant = ThemeConfig.currentTheme.outlineVariantDark,
|
||||||
outlineVariant = Color.White.copy(alpha = 0.12f),
|
scrim = ThemeConfig.currentTheme.scrimDark,
|
||||||
error = ThemeConfig.currentTheme.Error,
|
inverseSurface = ThemeConfig.currentTheme.inverseSurfaceDark,
|
||||||
onError = ThemeConfig.currentTheme.OnError,
|
inverseOnSurface = ThemeConfig.currentTheme.inverseOnSurfaceDark,
|
||||||
errorContainer = ThemeConfig.currentTheme.ErrorContainer.copy(alpha = 0.15f),
|
inversePrimary = ThemeConfig.currentTheme.inversePrimaryDark,
|
||||||
onErrorContainer = Color.White
|
surfaceDim = ThemeConfig.currentTheme.surfaceDimDark,
|
||||||
|
surfaceBright = ThemeConfig.currentTheme.surfaceBrightDark,
|
||||||
|
surfaceContainerLowest = ThemeConfig.currentTheme.surfaceContainerLowestDark,
|
||||||
|
surfaceContainerLow = ThemeConfig.currentTheme.surfaceContainerLowDark,
|
||||||
|
surfaceContainer = ThemeConfig.currentTheme.surfaceContainerDark,
|
||||||
|
surfaceContainerHigh = ThemeConfig.currentTheme.surfaceContainerHighDark,
|
||||||
|
surfaceContainerHighest = ThemeConfig.currentTheme.surfaceContainerHighestDark,
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -342,30 +353,41 @@ private fun createDarkColorScheme() = darkColorScheme(
|
|||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
private fun createLightColorScheme() = lightColorScheme(
|
private fun createLightColorScheme() = lightColorScheme(
|
||||||
primary = ThemeConfig.currentTheme.Primary,
|
primary = ThemeConfig.currentTheme.primaryLight,
|
||||||
onPrimary = ThemeConfig.currentTheme.OnPrimary,
|
onPrimary = ThemeConfig.currentTheme.onPrimaryLight,
|
||||||
primaryContainer = ThemeConfig.currentTheme.PrimaryContainer,
|
primaryContainer = ThemeConfig.currentTheme.primaryContainerLight,
|
||||||
onPrimaryContainer = ThemeConfig.currentTheme.OnPrimaryContainer,
|
onPrimaryContainer = ThemeConfig.currentTheme.onPrimaryContainerLight,
|
||||||
secondary = ThemeConfig.currentTheme.Secondary,
|
secondary = ThemeConfig.currentTheme.secondaryLight,
|
||||||
onSecondary = ThemeConfig.currentTheme.OnSecondary,
|
onSecondary = ThemeConfig.currentTheme.onSecondaryLight,
|
||||||
secondaryContainer = ThemeConfig.currentTheme.SecondaryContainer,
|
secondaryContainer = ThemeConfig.currentTheme.secondaryContainerLight,
|
||||||
onSecondaryContainer = ThemeConfig.currentTheme.OnSecondaryContainer,
|
onSecondaryContainer = ThemeConfig.currentTheme.onSecondaryContainerLight,
|
||||||
tertiary = ThemeConfig.currentTheme.Tertiary,
|
tertiary = ThemeConfig.currentTheme.tertiaryLight,
|
||||||
onTertiary = ThemeConfig.currentTheme.OnTertiary,
|
onTertiary = ThemeConfig.currentTheme.onTertiaryLight,
|
||||||
tertiaryContainer = ThemeConfig.currentTheme.TertiaryContainer,
|
tertiaryContainer = ThemeConfig.currentTheme.tertiaryContainerLight,
|
||||||
onTertiaryContainer = ThemeConfig.currentTheme.OnTertiaryContainer,
|
onTertiaryContainer = ThemeConfig.currentTheme.onTertiaryContainerLight,
|
||||||
|
error = ThemeConfig.currentTheme.errorLight,
|
||||||
|
onError = ThemeConfig.currentTheme.onErrorLight,
|
||||||
|
errorContainer = ThemeConfig.currentTheme.errorContainerLight,
|
||||||
|
onErrorContainer = ThemeConfig.currentTheme.onErrorContainerLight,
|
||||||
background = Color.Transparent,
|
background = Color.Transparent,
|
||||||
|
onBackground = ThemeConfig.currentTheme.onBackgroundLight,
|
||||||
surface = Color.Transparent,
|
surface = Color.Transparent,
|
||||||
onBackground = Color.Black.copy(alpha = 0.87f),
|
onSurface = ThemeConfig.currentTheme.onSurfaceLight,
|
||||||
onSurface = Color.Black.copy(alpha = 0.87f),
|
surfaceVariant = ThemeConfig.currentTheme.surfaceVariantLight,
|
||||||
surfaceVariant = Color(0xFFF5F5F5),
|
onSurfaceVariant = ThemeConfig.currentTheme.onSurfaceVariantLight,
|
||||||
onSurfaceVariant = Color.Black.copy(alpha = 0.78f),
|
outline = ThemeConfig.currentTheme.outlineLight,
|
||||||
outline = Color.Black.copy(alpha = 0.12f),
|
outlineVariant = ThemeConfig.currentTheme.outlineVariantLight,
|
||||||
outlineVariant = Color.Black.copy(alpha = 0.12f),
|
scrim = ThemeConfig.currentTheme.scrimLight,
|
||||||
error = ThemeConfig.currentTheme.Error,
|
inverseSurface = ThemeConfig.currentTheme.inverseSurfaceLight,
|
||||||
onError = ThemeConfig.currentTheme.OnError,
|
inverseOnSurface = ThemeConfig.currentTheme.inverseOnSurfaceLight,
|
||||||
errorContainer = ThemeConfig.currentTheme.ErrorContainer,
|
inversePrimary = ThemeConfig.currentTheme.inversePrimaryLight,
|
||||||
onErrorContainer = ThemeConfig.currentTheme.OnErrorContainer
|
surfaceDim = ThemeConfig.currentTheme.surfaceDimLight,
|
||||||
|
surfaceBright = ThemeConfig.currentTheme.surfaceBrightLight,
|
||||||
|
surfaceContainerLowest = ThemeConfig.currentTheme.surfaceContainerLowestLight,
|
||||||
|
surfaceContainerLow = ThemeConfig.currentTheme.surfaceContainerLowLight,
|
||||||
|
surfaceContainer = ThemeConfig.currentTheme.surfaceContainerLight,
|
||||||
|
surfaceContainerHigh = ThemeConfig.currentTheme.surfaceContainerHighLight,
|
||||||
|
surfaceContainerHighest = ThemeConfig.currentTheme.surfaceContainerHighestLight,
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
package com.sukisu.ultra.ui.util
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import java.io.BufferedReader
|
||||||
|
import java.io.InputStreamReader
|
||||||
|
import java.nio.charset.StandardCharsets
|
||||||
|
import java.util.zip.ZipInputStream
|
||||||
|
import com.sukisu.ultra.R
|
||||||
|
import android.util.Log
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
|
object ModuleUtils {
|
||||||
|
private const val TAG = "ModuleUtils"
|
||||||
|
|
||||||
|
fun extractModuleName(context: Context, uri: Uri): String {
|
||||||
|
if (uri == Uri.EMPTY) {
|
||||||
|
Log.e(TAG, "The supplied URI is empty")
|
||||||
|
return context.getString(R.string.unknown_module)
|
||||||
|
}
|
||||||
|
|
||||||
|
return try {
|
||||||
|
Log.d(TAG, "Start extracting module names from URIs: $uri")
|
||||||
|
|
||||||
|
// 从URI路径中提取文件名
|
||||||
|
val fileName = uri.lastPathSegment?.let { path ->
|
||||||
|
val lastSlash = path.lastIndexOf('/')
|
||||||
|
if (lastSlash != -1 && lastSlash < path.length - 1) {
|
||||||
|
path.substring(lastSlash + 1)
|
||||||
|
} else {
|
||||||
|
path
|
||||||
|
}
|
||||||
|
}?.removeSuffix(".zip") ?: context.getString(R.string.unknown_module)
|
||||||
|
|
||||||
|
var formattedFileName = fileName.replace(Regex("[^a-zA-Z0-9\\s\\-_.@()\\u4e00-\\u9fa5]"), "").trim()
|
||||||
|
var moduleName = formattedFileName
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 打开ZIP文件输入流
|
||||||
|
val inputStream = context.contentResolver.openInputStream(uri)
|
||||||
|
if (inputStream == null) {
|
||||||
|
Log.e(TAG, "Unable to get input stream from URI: $uri")
|
||||||
|
return formattedFileName
|
||||||
|
}
|
||||||
|
|
||||||
|
val zipInputStream = ZipInputStream(inputStream)
|
||||||
|
var entry = zipInputStream.nextEntry
|
||||||
|
|
||||||
|
// 遍历ZIP文件中的条目,查找module.prop文件
|
||||||
|
while (entry != null) {
|
||||||
|
if (entry.name == "module.prop") {
|
||||||
|
val reader = BufferedReader(InputStreamReader(zipInputStream, StandardCharsets.UTF_8))
|
||||||
|
var line: String?
|
||||||
|
var nameFound = false
|
||||||
|
while (reader.readLine().also { line = it } != null) {
|
||||||
|
if (line?.startsWith("name=") == true) {
|
||||||
|
moduleName = line.substringAfter("=")
|
||||||
|
moduleName = moduleName.replace(Regex("[^a-zA-Z0-9\\s\\-_.@()\\u4e00-\\u9fa5]"), "").trim()
|
||||||
|
nameFound = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
entry = zipInputStream.nextEntry
|
||||||
|
}
|
||||||
|
zipInputStream.close()
|
||||||
|
Log.d(TAG, "Successfully extracted module name: $moduleName")
|
||||||
|
moduleName
|
||||||
|
} catch (e: IOException) {
|
||||||
|
Log.e(TAG, "Error reading ZIP file: ${e.message}")
|
||||||
|
formattedFileName
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Exception when extracting module name: ${e.message}")
|
||||||
|
context.getString(R.string.unknown_module)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证URI是否有效并可访问
|
||||||
|
fun isUriAccessible(context: Context, uri: Uri): Boolean {
|
||||||
|
if (uri == Uri.EMPTY) return false
|
||||||
|
|
||||||
|
return try {
|
||||||
|
val inputStream = context.contentResolver.openInputStream(uri)
|
||||||
|
inputStream?.close()
|
||||||
|
inputStream != null
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "The URI is inaccessible: $uri, Error: ${e.message}")
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取URI的持久权限
|
||||||
|
fun takePersistableUriPermission(context: Context, uri: Uri) {
|
||||||
|
try {
|
||||||
|
val flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||||
|
context.contentResolver.takePersistableUriPermission(uri, flags)
|
||||||
|
Log.d(TAG, "Persistent permissions for URIs have been obtained: $uri")
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Unable to get persistent permissions on URIs: $uri, Error: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,10 @@
|
|||||||
package com.sukisu.ultra.ui.util
|
package com.sukisu.ultra.ui.util
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import android.content.Context
|
||||||
import androidx.compose.ui.res.stringResource
|
|
||||||
import com.topjohnwu.superuser.Shell
|
import com.topjohnwu.superuser.Shell
|
||||||
import com.sukisu.ultra.R
|
import com.sukisu.ultra.R
|
||||||
|
|
||||||
@Composable
|
fun getSELinuxStatus(context: Context): String {
|
||||||
fun getSELinuxStatus(): String {
|
|
||||||
val shell = Shell.Builder.create().build("sh")
|
val shell = Shell.Builder.create().build("sh")
|
||||||
val list = ArrayList<String>()
|
val list = ArrayList<String>()
|
||||||
|
|
||||||
@@ -18,16 +16,16 @@ fun getSELinuxStatus(): String {
|
|||||||
|
|
||||||
return if (result.isSuccess) {
|
return if (result.isSuccess) {
|
||||||
when (output) {
|
when (output) {
|
||||||
"Enforcing" -> stringResource(R.string.selinux_status_enforcing)
|
"Enforcing" -> context.getString(R.string.selinux_status_enforcing)
|
||||||
"Permissive" -> stringResource(R.string.selinux_status_permissive)
|
"Permissive" -> context.getString(R.string.selinux_status_permissive)
|
||||||
"Disabled" -> stringResource(R.string.selinux_status_disabled)
|
"Disabled" -> context.getString(R.string.selinux_status_disabled)
|
||||||
else -> stringResource(R.string.selinux_status_unknown)
|
else -> context.getString(R.string.selinux_status_unknown)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (output.contains("Permission denied")) {
|
if (output.contains("Permission denied")) {
|
||||||
stringResource(R.string.selinux_status_enforcing)
|
context.getString(R.string.selinux_status_enforcing)
|
||||||
} else {
|
} else {
|
||||||
stringResource(R.string.selinux_status_unknown)
|
context.getString(R.string.selinux_status_unknown)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,290 @@
|
|||||||
|
package com.sukisu.ultra.ui.viewmodel
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.SystemClock
|
||||||
|
import android.system.Os
|
||||||
|
import android.util.Log
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.dergoogler.mmrl.platform.Platform.Companion.context
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import com.sukisu.ultra.KernelVersion
|
||||||
|
import com.sukisu.ultra.Natives
|
||||||
|
import com.sukisu.ultra.getKernelVersion
|
||||||
|
import com.sukisu.ultra.ksuApp
|
||||||
|
import com.sukisu.ultra.ui.util.*
|
||||||
|
import com.sukisu.ultra.ui.util.module.LatestVersionInfo
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import androidx.core.content.edit
|
||||||
|
|
||||||
|
class HomeViewModel : ViewModel() {
|
||||||
|
companion object {
|
||||||
|
private const val TAG = "HomeViewModel"
|
||||||
|
private const val CACHE_DURATION = 5 * 60 * 1000L
|
||||||
|
private const val PREFS_NAME = "home_cache"
|
||||||
|
private const val KEY_SYSTEM_STATUS = "system_status"
|
||||||
|
private const val KEY_SYSTEM_INFO = "system_info"
|
||||||
|
private const val KEY_VERSION_INFO = "version_info"
|
||||||
|
private const val KEY_LAST_UPDATE = "last_update_time"
|
||||||
|
}
|
||||||
|
|
||||||
|
// 系统状态
|
||||||
|
data class SystemStatus(
|
||||||
|
val isManager: Boolean = false,
|
||||||
|
val ksuVersion: Int? = null,
|
||||||
|
val lkmMode: Boolean? = null,
|
||||||
|
val kernelVersion: KernelVersion = getKernelVersion(),
|
||||||
|
val isRootAvailable: Boolean = false,
|
||||||
|
val isKpmConfigured: Boolean = false,
|
||||||
|
val requireNewKernel: Boolean = false
|
||||||
|
)
|
||||||
|
|
||||||
|
// 系统信息
|
||||||
|
data class SystemInfo(
|
||||||
|
val kernelRelease: String = "",
|
||||||
|
val androidVersion: String = "",
|
||||||
|
val deviceModel: String = "",
|
||||||
|
val managerVersion: Pair<String, Long> = Pair("", 0L),
|
||||||
|
val seLinuxStatus: String = "",
|
||||||
|
val kpmVersion: String = "",
|
||||||
|
val suSFSStatus: String = "",
|
||||||
|
val suSFSVersion: String = "",
|
||||||
|
val suSFSVariant: String = "",
|
||||||
|
val suSFSFeatures: String = "",
|
||||||
|
val susSUMode: String = "",
|
||||||
|
val superuserCount: Int = 0,
|
||||||
|
val moduleCount: Int = 0,
|
||||||
|
val kpmModuleCount: Int = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
private val gson = Gson()
|
||||||
|
private val prefs by lazy { ksuApp.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) }
|
||||||
|
|
||||||
|
var systemStatus by mutableStateOf(SystemStatus())
|
||||||
|
private set
|
||||||
|
|
||||||
|
var systemInfo by mutableStateOf(SystemInfo())
|
||||||
|
private set
|
||||||
|
|
||||||
|
var latestVersionInfo by mutableStateOf(LatestVersionInfo())
|
||||||
|
private set
|
||||||
|
|
||||||
|
var isSimpleMode by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var isHideVersion by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var isHideOtherInfo by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var isHideSusfsStatus by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var isHideLinkCard by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
var showKpmInfo by mutableStateOf(true)
|
||||||
|
private set
|
||||||
|
|
||||||
|
fun loadUserSettings(context: Context) {
|
||||||
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
|
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
isSimpleMode = prefs.getBoolean("is_simple_mode", false)
|
||||||
|
isHideVersion = prefs.getBoolean("is_hide_version", false)
|
||||||
|
isHideOtherInfo = prefs.getBoolean("is_hide_other_info", false)
|
||||||
|
isHideSusfsStatus = prefs.getBoolean("is_hide_susfs_status", false)
|
||||||
|
isHideLinkCard = prefs.getBoolean("is_hide_link_card", false)
|
||||||
|
showKpmInfo = prefs.getBoolean("show_kpm_info", true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun initializeData() {
|
||||||
|
viewModelScope.launch {
|
||||||
|
val currentTime = System.currentTimeMillis()
|
||||||
|
val lastUpdateTime = prefs.getLong(KEY_LAST_UPDATE, 0)
|
||||||
|
val shouldRefresh = currentTime - lastUpdateTime > CACHE_DURATION
|
||||||
|
|
||||||
|
if (!shouldRefresh) {
|
||||||
|
loadCachedData()
|
||||||
|
} else {
|
||||||
|
fetchAndSaveData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun loadCachedData() {
|
||||||
|
prefs.getString(KEY_SYSTEM_STATUS, null)?.let {
|
||||||
|
systemStatus = gson.fromJson(it, SystemStatus::class.java)
|
||||||
|
}
|
||||||
|
prefs.getString(KEY_SYSTEM_INFO, null)?.let {
|
||||||
|
systemInfo = gson.fromJson(it, SystemInfo::class.java)
|
||||||
|
}
|
||||||
|
prefs.getString(KEY_VERSION_INFO, null)?.let {
|
||||||
|
latestVersionInfo = gson.fromJson(it, LatestVersionInfo::class.java)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun fetchAndSaveData() {
|
||||||
|
fetchSystemStatus()
|
||||||
|
fetchSystemInfo()
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
prefs.edit {
|
||||||
|
putString(KEY_SYSTEM_STATUS, gson.toJson(systemStatus))
|
||||||
|
putString(KEY_SYSTEM_INFO, gson.toJson(systemInfo))
|
||||||
|
putString(KEY_VERSION_INFO, gson.toJson(latestVersionInfo))
|
||||||
|
putLong(KEY_LAST_UPDATE, System.currentTimeMillis())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun checkForUpdates(context: Context) {
|
||||||
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
val checkUpdate = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
|
.getBoolean("check_update", true)
|
||||||
|
|
||||||
|
if (checkUpdate) {
|
||||||
|
val currentTime = System.currentTimeMillis()
|
||||||
|
val lastUpdateTime = prefs.getLong(KEY_LAST_UPDATE, 0)
|
||||||
|
val shouldRefresh = currentTime - lastUpdateTime > CACHE_DURATION
|
||||||
|
|
||||||
|
if (shouldRefresh) {
|
||||||
|
val start = SystemClock.elapsedRealtime()
|
||||||
|
val newVersionInfo = checkNewVersion()
|
||||||
|
latestVersionInfo = newVersionInfo
|
||||||
|
prefs.edit { putString(KEY_VERSION_INFO, gson.toJson(newVersionInfo)) }
|
||||||
|
Log.i(TAG, "Update check completed in ${SystemClock.elapsedRealtime() - start}ms")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error checking for updates", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun refreshAllData(context: Context) {
|
||||||
|
viewModelScope.launch {
|
||||||
|
try {
|
||||||
|
fetchAndSaveData()
|
||||||
|
checkForUpdates(context)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error refreshing data", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun fetchSystemStatus() {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
val kernelVersion = getKernelVersion()
|
||||||
|
val isManager = Natives.becomeManager(ksuApp.packageName)
|
||||||
|
val ksuVersion = if (isManager) Natives.version else null
|
||||||
|
val lkmMode = ksuVersion?.let {
|
||||||
|
if (it >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && kernelVersion.isGKI()) Natives.isLkmMode else null
|
||||||
|
}
|
||||||
|
|
||||||
|
systemStatus = SystemStatus(
|
||||||
|
isManager = isManager,
|
||||||
|
ksuVersion = ksuVersion,
|
||||||
|
lkmMode = lkmMode,
|
||||||
|
kernelVersion = kernelVersion,
|
||||||
|
isRootAvailable = rootAvailable(),
|
||||||
|
isKpmConfigured = Natives.isKPMEnabled(),
|
||||||
|
requireNewKernel = isManager && Natives.requireNewKernel()
|
||||||
|
)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error fetching system status", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("RestrictedApi")
|
||||||
|
private suspend fun fetchSystemInfo() {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
val uname = Os.uname()
|
||||||
|
val kpmVersion = getKpmVersion()
|
||||||
|
val suSFS = getSuSFS()
|
||||||
|
var suSFSVersion = ""
|
||||||
|
var suSFSVariant = ""
|
||||||
|
var suSFSFeatures = ""
|
||||||
|
var susSUMode = ""
|
||||||
|
|
||||||
|
if (suSFS == "Supported") {
|
||||||
|
suSFSVersion = getSuSFSVersion()
|
||||||
|
if (suSFSVersion.isNotEmpty()) {
|
||||||
|
suSFSVariant = getSuSFSVariant()
|
||||||
|
suSFSFeatures = getSuSFSFeatures()
|
||||||
|
val isSUS_SU = suSFSFeatures == "CONFIG_KSU_SUSFS_SUS_SU"
|
||||||
|
if (isSUS_SU) {
|
||||||
|
susSUMode = try {
|
||||||
|
susfsSUS_SU_Mode().toString()
|
||||||
|
} catch (_: Exception) {
|
||||||
|
""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
systemInfo = SystemInfo(
|
||||||
|
kernelRelease = uname.release,
|
||||||
|
androidVersion = Build.VERSION.RELEASE,
|
||||||
|
deviceModel = getDeviceModel(),
|
||||||
|
managerVersion = getManagerVersion(ksuApp.applicationContext),
|
||||||
|
seLinuxStatus = getSELinuxStatus(context),
|
||||||
|
kpmVersion = kpmVersion,
|
||||||
|
suSFSStatus = suSFS,
|
||||||
|
suSFSVersion = suSFSVersion,
|
||||||
|
suSFSVariant = suSFSVariant,
|
||||||
|
suSFSFeatures = suSFSFeatures,
|
||||||
|
susSUMode = susSUMode,
|
||||||
|
superuserCount = getSuperuserCount(),
|
||||||
|
moduleCount = getModuleCount(),
|
||||||
|
kpmModuleCount = getKpmModuleCount()
|
||||||
|
)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error fetching system info", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("PrivateApi")
|
||||||
|
private fun getDeviceModel(): String {
|
||||||
|
return try {
|
||||||
|
val systemProperties = Class.forName("android.os.SystemProperties")
|
||||||
|
val getMethod = systemProperties.getMethod("get", String::class.java, String::class.java)
|
||||||
|
val marketNameKeys = listOf(
|
||||||
|
"ro.product.marketname", // Xiaomi
|
||||||
|
"ro.vendor.oplus.market.name", // Oppo, OnePlus, Realme
|
||||||
|
"ro.vivo.market.name", // Vivo
|
||||||
|
"ro.config.marketing_name" // Huawei
|
||||||
|
)
|
||||||
|
var result = Build.DEVICE
|
||||||
|
for (key in marketNameKeys) {
|
||||||
|
val marketName = getMethod.invoke(null, key, "") as String
|
||||||
|
if (marketName.isNotEmpty()) {
|
||||||
|
result = marketName
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error getting device model", e)
|
||||||
|
Build.DEVICE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getManagerVersion(context: Context): Pair<String, Long> {
|
||||||
|
return try {
|
||||||
|
val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0)!!
|
||||||
|
val versionCode = androidx.core.content.pm.PackageInfoCompat.getLongVersionCode(packageInfo)
|
||||||
|
Pair(packageInfo.versionName!!, versionCode)
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error getting manager version", e)
|
||||||
|
Pair("", 0L)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,6 +11,10 @@ import kotlinx.coroutines.launch
|
|||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import com.sukisu.ultra.ui.util.*
|
import com.sukisu.ultra.ui.util.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
class KpmViewModel : ViewModel() {
|
class KpmViewModel : ViewModel() {
|
||||||
var moduleList by mutableStateOf(emptyList<ModuleInfo>())
|
var moduleList by mutableStateOf(emptyList<ModuleInfo>())
|
||||||
private set
|
private set
|
||||||
|
|||||||
@@ -8,16 +8,23 @@ import androidx.compose.runtime.mutableStateOf
|
|||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
|
import com.dergoogler.mmrl.platform.model.ModuleConfig
|
||||||
|
import com.dergoogler.mmrl.platform.model.ModuleConfig.Companion.asModuleConfig
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import com.sukisu.ultra.ui.util.HanziToPinyin
|
import com.sukisu.ultra.ui.util.HanziToPinyin
|
||||||
import com.sukisu.ultra.ui.util.listModules
|
import com.sukisu.ultra.ui.util.listModules
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import java.text.Collator
|
import java.text.Collator
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
class ModuleViewModel : ViewModel() {
|
class ModuleViewModel : ViewModel() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -40,6 +47,7 @@ class ModuleViewModel : ViewModel() {
|
|||||||
val hasWebUi: Boolean,
|
val hasWebUi: Boolean,
|
||||||
val hasActionScript: Boolean,
|
val hasActionScript: Boolean,
|
||||||
val dirId: String, // real module id (dir name)
|
val dirId: String, // real module id (dir name)
|
||||||
|
var config: ModuleConfig? = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
var isRefreshing by mutableStateOf(false)
|
var isRefreshing by mutableStateOf(false)
|
||||||
@@ -100,9 +108,42 @@ class ModuleViewModel : ViewModel() {
|
|||||||
obj.optString("updateJson"),
|
obj.optString("updateJson"),
|
||||||
obj.optBoolean("web"),
|
obj.optBoolean("web"),
|
||||||
obj.optBoolean("action"),
|
obj.optBoolean("action"),
|
||||||
obj.getString("dir_id"),
|
obj.getString("dir_id")
|
||||||
)
|
)
|
||||||
}.toList()
|
}.toList()
|
||||||
|
launch {
|
||||||
|
modules.forEach { module ->
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
runCatching {
|
||||||
|
module.config = module.id.asModuleConfig
|
||||||
|
}.onFailure { e ->
|
||||||
|
Log.e(TAG, "Failed to load config from id for module ${module.id}", e)
|
||||||
|
}
|
||||||
|
if (module.config == null) {
|
||||||
|
runCatching {
|
||||||
|
module.config = module.name.asModuleConfig
|
||||||
|
}.onFailure { e ->
|
||||||
|
Log.e(TAG, "Failed to load config from name for module ${module.id}", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (module.config == null) {
|
||||||
|
runCatching {
|
||||||
|
module.config = module.description.asModuleConfig
|
||||||
|
}.onFailure { e ->
|
||||||
|
Log.e(TAG, "Failed to load config from description for module ${module.id}", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (module.config == null) {
|
||||||
|
module.config = ModuleConfig()
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Failed to load any config for module ${module.id}", e)
|
||||||
|
module.config = ModuleConfig()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
isNeedRefresh = false
|
isNeedRefresh = false
|
||||||
}.onFailure { e ->
|
}.onFailure { e ->
|
||||||
Log.e(TAG, "fetchModuleList: ", e)
|
Log.e(TAG, "fetchModuleList: ", e)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.content.pm.PackageInfo
|
|||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
@@ -20,14 +21,20 @@ import java.text.Collator
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import com.dergoogler.mmrl.platform.Platform
|
import com.dergoogler.mmrl.platform.Platform
|
||||||
import com.dergoogler.mmrl.platform.TIMEOUT_MILLIS
|
import com.dergoogler.mmrl.platform.TIMEOUT_MILLIS
|
||||||
|
import com.sukisu.ultra.ui.webui.getInstalledPackagesAll
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.withTimeoutOrNull
|
import kotlinx.coroutines.withTimeoutOrNull
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ShirkNeko
|
||||||
|
* @date 2025/5/31.
|
||||||
|
*/
|
||||||
class SuperUserViewModel : ViewModel() {
|
class SuperUserViewModel : ViewModel() {
|
||||||
val isPlatformAlive get() = Platform.isAlive
|
val isPlatformAlive get() = Platform.isAlive
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "SuperUserViewModel"
|
private const val TAG = "SuperUserViewModel"
|
||||||
private var apps by mutableStateOf<List<AppInfo>>(emptyList())
|
var apps by mutableStateOf<List<AppInfo>>(emptyList())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
@@ -164,7 +171,7 @@ class SuperUserViewModel : ViewModel() {
|
|||||||
fetchAppList() // 刷新列表以显示最新状态
|
fetchAppList() // 刷新列表以显示最新状态
|
||||||
}
|
}
|
||||||
|
|
||||||
// 仅更新本地应用配置,避免重新获取整个列表导致滚动位置重置
|
// 更新本地应用配置
|
||||||
fun updateAppProfileLocally(packageName: String, updatedProfile: Natives.Profile) {
|
fun updateAppProfileLocally(packageName: String, updatedProfile: Natives.Profile) {
|
||||||
apps = apps.map { app ->
|
apps = apps.map { app ->
|
||||||
if (app.packageName == packageName) {
|
if (app.packageName == packageName) {
|
||||||
@@ -187,15 +194,10 @@ class SuperUserViewModel : ViewModel() {
|
|||||||
val pm = ksuApp.packageManager
|
val pm = ksuApp.packageManager
|
||||||
val start = SystemClock.elapsedRealtime()
|
val start = SystemClock.elapsedRealtime()
|
||||||
|
|
||||||
val userInfos = Platform.userManager.getUsers()
|
val packages = Platform.getInstalledPackagesAll {
|
||||||
val packages = mutableListOf<PackageInfo>()
|
Log.e(TAG, "getInstalledPackagesAll:", it)
|
||||||
val packageManager = Platform.packageManager
|
Toast.makeText(ksuApp, "Something went wrong, check logs", Toast.LENGTH_SHORT).show()
|
||||||
|
|
||||||
for (userInfo in userInfos) {
|
|
||||||
Log.i(TAG, "fetchAppList: ${userInfo.id}")
|
|
||||||
packages.addAll(packageManager.getInstalledPackages(0, userInfo.id))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
apps = packages.map {
|
apps = packages.map {
|
||||||
val appInfo = it.applicationInfo
|
val appInfo = it.applicationInfo
|
||||||
val uid = appInfo!!.uid
|
val uid = appInfo!!.uid
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.sukisu.ultra.ui.webui
|
|||||||
|
|
||||||
import android.content.ServiceConnection
|
import android.content.ServiceConnection
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.content.pm.PackageInfo
|
||||||
import com.dergoogler.mmrl.platform.Platform
|
import com.dergoogler.mmrl.platform.Platform
|
||||||
import com.dergoogler.mmrl.platform.model.IProvider
|
import com.dergoogler.mmrl.platform.model.IProvider
|
||||||
import com.dergoogler.mmrl.platform.model.PlatformIntent
|
import com.dergoogler.mmrl.platform.model.PlatformIntent
|
||||||
@@ -53,4 +54,19 @@ suspend fun initPlatform() = withContext(Dispatchers.IO) {
|
|||||||
Log.e("KsuLibSu", "Failed to initialize platform", e)
|
Log.e("KsuLibSu", "Failed to initialize platform", e)
|
||||||
return@withContext false
|
return@withContext false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Platform.Companion.getInstalledPackagesAll(catch: (Exception) -> Unit = {}): List<PackageInfo> =
|
||||||
|
try {
|
||||||
|
val packages = mutableListOf<PackageInfo>()
|
||||||
|
val userInfos = userManager.getUsers()
|
||||||
|
|
||||||
|
for (userInfo in userInfos) {
|
||||||
|
packages.addAll(packageManager.getInstalledPackages(0, userInfo.id))
|
||||||
|
}
|
||||||
|
|
||||||
|
packages
|
||||||
|
} catch (e: Exception) {
|
||||||
|
catch(e)
|
||||||
|
packageManager.getInstalledPackages(0, userManager.myUserId)
|
||||||
|
}
|
||||||
@@ -1,273 +0,0 @@
|
|||||||
package com.sukisu.ultra.ui.webui
|
|
||||||
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.activity.SystemBarStyle
|
|
||||||
import androidx.activity.enableEdgeToEdge
|
|
||||||
import androidx.compose.foundation.background
|
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
|
||||||
import androidx.compose.foundation.layout.Box
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.darkColorScheme
|
|
||||||
import androidx.compose.material3.dynamicDarkColorScheme
|
|
||||||
import androidx.compose.material3.dynamicLightColorScheme
|
|
||||||
import androidx.compose.material3.lightColorScheme
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.runtime.CompositionLocalProvider
|
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
|
||||||
import androidx.compose.runtime.SideEffect
|
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.runtime.staticCompositionLocalOf
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.draw.alpha
|
|
||||||
import androidx.compose.ui.draw.paint
|
|
||||||
import androidx.compose.ui.graphics.Brush
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.graphics.toArgb
|
|
||||||
import androidx.compose.ui.layout.ContentScale
|
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.zIndex
|
|
||||||
import android.os.Build
|
|
||||||
import androidx.compose.animation.core.animateFloat
|
|
||||||
import androidx.compose.animation.core.spring
|
|
||||||
import androidx.compose.animation.core.updateTransition
|
|
||||||
import androidx.compose.ui.graphics.graphicsLayer
|
|
||||||
import coil.compose.AsyncImagePainter
|
|
||||||
import coil.compose.rememberAsyncImagePainter
|
|
||||||
import com.sukisu.ultra.ui.theme.ThemeConfig
|
|
||||||
import com.sukisu.ultra.ui.theme.Typography
|
|
||||||
import com.sukisu.ultra.ui.theme.loadCustomBackground
|
|
||||||
|
|
||||||
// 提供界面类型的本地组合
|
|
||||||
val LocalIsSecondaryScreen = staticCompositionLocalOf { false }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* WebUI专用主题配置
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
fun WebUIXTheme(
|
|
||||||
darkTheme: Boolean = isSystemInDarkTheme(),
|
|
||||||
dynamicColor: Boolean = true,
|
|
||||||
isSecondaryScreen: Boolean = false,
|
|
||||||
content: @Composable () -> Unit
|
|
||||||
) {
|
|
||||||
val context = LocalContext.current
|
|
||||||
|
|
||||||
LaunchedEffect(Unit) {
|
|
||||||
if (!ThemeConfig.backgroundImageLoaded && !ThemeConfig.preventBackgroundRefresh) {
|
|
||||||
context.loadCustomBackground()
|
|
||||||
ThemeConfig.backgroundImageLoaded = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 更新二级界面状态
|
|
||||||
LaunchedEffect(isSecondaryScreen) {
|
|
||||||
WebViewInterface.updateSecondaryScreenState(isSecondaryScreen)
|
|
||||||
}
|
|
||||||
|
|
||||||
val colorScheme = when {
|
|
||||||
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
|
|
||||||
if (darkTheme) {
|
|
||||||
dynamicDarkColorScheme(context).let { scheme ->
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
scheme.copy(
|
|
||||||
background = scheme.surfaceContainerHighest,
|
|
||||||
surface = scheme.surfaceContainerHighest
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
scheme.copy(
|
|
||||||
background = Color.Transparent,
|
|
||||||
surface = Color.Transparent
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dynamicLightColorScheme(context).let { scheme ->
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
scheme.copy(
|
|
||||||
background = scheme.surfaceContainerHighest,
|
|
||||||
surface = scheme.surfaceContainerHighest
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
scheme.copy(
|
|
||||||
background = Color.Transparent,
|
|
||||||
surface = Color.Transparent
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
darkTheme -> {
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
darkColorScheme().copy(
|
|
||||||
background = MaterialTheme.colorScheme.surfaceContainerHighest,
|
|
||||||
surface = MaterialTheme.colorScheme.surfaceContainerHighest
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
darkColorScheme().copy(
|
|
||||||
background = Color.Transparent,
|
|
||||||
surface = Color.Transparent
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
lightColorScheme().copy(
|
|
||||||
background = MaterialTheme.colorScheme.surfaceContainerHighest,
|
|
||||||
surface = MaterialTheme.colorScheme.surfaceContainerHighest
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
lightColorScheme().copy(
|
|
||||||
background = Color.Transparent,
|
|
||||||
surface = Color.Transparent
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ConfigureSystemBars(darkTheme)
|
|
||||||
|
|
||||||
val backgroundUri = remember { mutableStateOf(ThemeConfig.customBackgroundUri) }
|
|
||||||
|
|
||||||
LaunchedEffect(ThemeConfig.customBackgroundUri) {
|
|
||||||
backgroundUri.value = ThemeConfig.customBackgroundUri
|
|
||||||
}
|
|
||||||
val bgImagePainter = backgroundUri.value?.let {
|
|
||||||
rememberAsyncImagePainter(
|
|
||||||
model = it,
|
|
||||||
onError = {
|
|
||||||
ThemeConfig.backgroundImageLoaded = false
|
|
||||||
},
|
|
||||||
onSuccess = {
|
|
||||||
ThemeConfig.backgroundImageLoaded = true
|
|
||||||
ThemeConfig.isThemeChanging = false
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 背景透明度动画
|
|
||||||
val transition = updateTransition(
|
|
||||||
targetState = ThemeConfig.backgroundImageLoaded,
|
|
||||||
label = "bgTransition"
|
|
||||||
)
|
|
||||||
|
|
||||||
val bgAlpha by transition.animateFloat(
|
|
||||||
label = "bgAlpha",
|
|
||||||
transitionSpec = {
|
|
||||||
spring(
|
|
||||||
dampingRatio = 0.8f,
|
|
||||||
stiffness = 300f
|
|
||||||
)
|
|
||||||
}
|
|
||||||
) { loaded -> if (loaded) 1f else 0f }
|
|
||||||
CompositionLocalProvider(LocalIsSecondaryScreen provides isSecondaryScreen) {
|
|
||||||
MaterialTheme(
|
|
||||||
colorScheme = colorScheme,
|
|
||||||
typography = Typography,
|
|
||||||
) {
|
|
||||||
if (isSecondaryScreen) {
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.background(MaterialTheme.colorScheme.surfaceContainerHighest)
|
|
||||||
) {
|
|
||||||
content()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Box(modifier = Modifier.fillMaxSize()) {
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.zIndex(-2f)
|
|
||||||
.background(if (darkTheme) Color.Black else Color.White)
|
|
||||||
)
|
|
||||||
|
|
||||||
backgroundUri.value?.let { uri ->
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.zIndex(-1f)
|
|
||||||
.alpha(bgAlpha)
|
|
||||||
) {
|
|
||||||
bgImagePainter?.let { painter ->
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.paint(
|
|
||||||
painter = painter,
|
|
||||||
contentScale = ContentScale.Crop
|
|
||||||
)
|
|
||||||
.graphicsLayer {
|
|
||||||
alpha = (painter.state as? AsyncImagePainter.State.Success)?.let { 1f } ?: 0f
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.background(
|
|
||||||
if (darkTheme) Color.Black.copy(alpha = 0.6f)
|
|
||||||
else Color.White.copy(alpha = 0.1f)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.background(
|
|
||||||
Brush.radialGradient(
|
|
||||||
colors = listOf(
|
|
||||||
Color.Transparent,
|
|
||||||
if (darkTheme) Color.Black.copy(alpha = 0.5f)
|
|
||||||
else Color.Black.copy(alpha = 0.2f)
|
|
||||||
),
|
|
||||||
radius = 1200f
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Box(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize()
|
|
||||||
.zIndex(1f)
|
|
||||||
) {
|
|
||||||
content()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 配置WebUI的系统栏样式
|
|
||||||
*/
|
|
||||||
@Composable
|
|
||||||
private fun ConfigureSystemBars(
|
|
||||||
darkMode: Boolean,
|
|
||||||
statusBarScrim: Color = Color.Transparent,
|
|
||||||
navigationBarScrim: Color = Color.Transparent
|
|
||||||
) {
|
|
||||||
val context = LocalContext.current
|
|
||||||
val activity = context as ComponentActivity
|
|
||||||
|
|
||||||
SideEffect {
|
|
||||||
activity.enableEdgeToEdge(
|
|
||||||
statusBarStyle = SystemBarStyle.auto(
|
|
||||||
statusBarScrim.toArgb(),
|
|
||||||
statusBarScrim.toArgb()
|
|
||||||
) { darkMode },
|
|
||||||
navigationBarStyle = when {
|
|
||||||
darkMode -> SystemBarStyle.dark(
|
|
||||||
navigationBarScrim.toArgb()
|
|
||||||
)
|
|
||||||
else -> SystemBarStyle.light(
|
|
||||||
navigationBarScrim.toArgb(),
|
|
||||||
navigationBarScrim.toArgb()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -20,6 +20,7 @@ import com.dergoogler.mmrl.ui.component.Loading
|
|||||||
import com.dergoogler.mmrl.webui.screen.WebUIScreen
|
import com.dergoogler.mmrl.webui.screen.WebUIScreen
|
||||||
import com.dergoogler.mmrl.webui.util.rememberWebUIOptions
|
import com.dergoogler.mmrl.webui.util.rememberWebUIOptions
|
||||||
import com.sukisu.ultra.BuildConfig
|
import com.sukisu.ultra.BuildConfig
|
||||||
|
import com.sukisu.ultra.ui.theme.KernelSUTheme
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@@ -68,7 +69,7 @@ class WebUIXActivity : ComponentActivity() {
|
|||||||
val prefs = getSharedPreferences("settings", MODE_PRIVATE)
|
val prefs = getSharedPreferences("settings", MODE_PRIVATE)
|
||||||
|
|
||||||
setContent {
|
setContent {
|
||||||
WebUIXTheme {
|
KernelSUTheme {
|
||||||
var isLoading by remember { mutableStateOf(true) }
|
var isLoading by remember { mutableStateOf(true) }
|
||||||
|
|
||||||
LaunchedEffect(Platform.isAlive) {
|
LaunchedEffect(Platform.isAlive) {
|
||||||
@@ -81,7 +82,7 @@ class WebUIXActivity : ComponentActivity() {
|
|||||||
|
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
Loading()
|
Loading()
|
||||||
return@WebUIXTheme
|
return@KernelSUTheme
|
||||||
}
|
}
|
||||||
|
|
||||||
val webDebugging = prefs.getBoolean("enable_web_debugging", false)
|
val webDebugging = prefs.getBoolean("enable_web_debugging", false)
|
||||||
|
|||||||
@@ -7,9 +7,6 @@ import android.text.TextUtils
|
|||||||
import android.view.Window
|
import android.view.Window
|
||||||
import android.webkit.JavascriptInterface
|
import android.webkit.JavascriptInterface
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsControllerCompat
|
import androidx.core.view.WindowInsetsControllerCompat
|
||||||
import com.dergoogler.mmrl.webui.interfaces.WXInterface
|
import com.dergoogler.mmrl.webui.interfaces.WXInterface
|
||||||
@@ -23,8 +20,7 @@ import com.sukisu.ultra.ui.util.listModules
|
|||||||
import com.sukisu.ultra.ui.util.withNewRootShell
|
import com.sukisu.ultra.ui.util.withNewRootShell
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
import com.sukisu.ultra.ui.util.controlKpmModule
|
import com.sukisu.ultra.ui.util.*
|
||||||
import com.sukisu.ultra.ui.util.listKpmModules
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.CompletableFuture
|
import java.util.concurrent.CompletableFuture
|
||||||
|
|
||||||
@@ -34,47 +30,11 @@ class WebViewInterface(
|
|||||||
override var name: String = "ksu"
|
override var name: String = "ksu"
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private var isSecondaryScreenState by mutableStateOf(false)
|
|
||||||
private var windowInsetsController: WindowInsetsControllerCompat? = null
|
|
||||||
|
|
||||||
fun factory() = JavaScriptInterface(WebViewInterface::class.java)
|
fun factory() = JavaScriptInterface(WebViewInterface::class.java)
|
||||||
|
|
||||||
fun updateSecondaryScreenState(isSecondary: Boolean) {
|
|
||||||
isSecondaryScreenState = isSecondary
|
|
||||||
|
|
||||||
windowInsetsController?.let { controller ->
|
|
||||||
if (isSecondary) {
|
|
||||||
controller.show(WindowInsetsCompat.Type.systemBars())
|
|
||||||
controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_DEFAULT
|
|
||||||
} else {
|
|
||||||
controller.systemBarsBehavior =
|
|
||||||
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setWindowInsetsController(controller: WindowInsetsControllerCompat) {
|
|
||||||
windowInsetsController = controller
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
|
||||||
if (context is Activity) {
|
|
||||||
setWindowInsetsController(WindowInsetsControllerCompat(
|
|
||||||
activity.window,
|
|
||||||
activity.window.decorView
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private val modDir get() = "/data/adb/modules/${modId.id}"
|
private val modDir get() = "/data/adb/modules/${modId.id}"
|
||||||
|
|
||||||
@JavascriptInterface
|
|
||||||
fun isSecondaryPage(): Boolean {
|
|
||||||
return isSecondaryScreenState
|
|
||||||
}
|
|
||||||
|
|
||||||
@JavascriptInterface
|
@JavascriptInterface
|
||||||
fun exec(cmd: String): String {
|
fun exec(cmd: String): String {
|
||||||
return withNewRootShell(true) { ShellUtils.fastCmd(this, cmd) }
|
return withNewRootShell(true) { ShellUtils.fastCmd(this, cmd) }
|
||||||
@@ -226,7 +186,7 @@ class WebViewInterface(
|
|||||||
@JavascriptInterface
|
@JavascriptInterface
|
||||||
fun moduleInfo(): String {
|
fun moduleInfo(): String {
|
||||||
val moduleInfos = JSONArray(listModules())
|
val moduleInfos = JSONArray(listModules())
|
||||||
var currentModuleInfo = JSONObject()
|
val currentModuleInfo = JSONObject()
|
||||||
currentModuleInfo.put("moduleDir", modDir)
|
currentModuleInfo.put("moduleDir", modDir)
|
||||||
val moduleId = File(modDir).getName()
|
val moduleId = File(modDir).getName()
|
||||||
for (i in 0 until moduleInfos.length()) {
|
for (i in 0 until moduleInfos.length()) {
|
||||||
@@ -236,7 +196,7 @@ class WebViewInterface(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
var keys = currentInfo.keys()
|
val keys = currentInfo.keys()
|
||||||
for (key in keys) {
|
for (key in keys) {
|
||||||
currentModuleInfo.put(key, currentInfo.get(key))
|
currentModuleInfo.put(key, currentInfo.get(key))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,21 +2,772 @@
|
|||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="108dp"
|
android:width="108dp"
|
||||||
android:height="108dp"
|
android:height="108dp"
|
||||||
android:viewportWidth="108"
|
android:viewportWidth="512"
|
||||||
android:viewportHeight="108">
|
android:viewportHeight="512">
|
||||||
|
<group android:scaleX="0.45"
|
||||||
|
android:scaleY="0.45"
|
||||||
|
android:translateX="140.8"
|
||||||
|
android:translateY="140.8">
|
||||||
|
|
||||||
<group
|
<path
|
||||||
android:scaleX="0.135"
|
android:fillColor="#fff9f6"
|
||||||
android:scaleY="0.135">
|
android:strokeColor="#4c4f59"
|
||||||
<path
|
android:strokeWidth="6.5"
|
||||||
android:pathData="M 259 259 H 541 V 541 H 259 V 259 Z"
|
android:strokeMiterLimit="1.3"
|
||||||
android:strokeWidth="18"
|
android:strokeLineCap="round"
|
||||||
android:strokeColor="#1e110d" />
|
android:pathData="M164.239,424.641 L133.168,450.694 C133.168,450.694,127.975,468.87,159.134,479.627 C190.293,490.384,372.425,481.111,372.425,481.111 C372.425,481.111,424.728,492.981,453.29,444.017 C452.919,444.759,444.387,463.306,444.387,463.306 L445.871,482.595 C445.871,482.595,503.606,473.181,476.327,333.64 C480.524,324.197,484.72,318.427,484.72,318.427 L481.572,296.657 C481.572,296.657,487.23,256.322,489.455,251.128 C491.681,245.935,499.099,240,499.099,240 C499.099,240,496.317,219.598,492.422,213.849 C491.68,210.511,499.284,178.795,494.462,155.797 C487.414,143.927,489.64,143.927,475.544,130.202 C475.544,130.573,484.447,85.3181,474.802,56.7556 C471.834,56.7556,442.53,45.9983,377.986,80.4958 C377.615,81.6086,351.649,50.4496,224.416,64.5453 C223.674,64.5453,181.016,26.7093,157.647,24.1127 C156.534,23.7418,135.02,20.0323,132.423,73.0769 C132.423,74.1897,88.281,89.0274,76.4109,137.992 C64.5408,186.956,65.2827,218.857,65.2827,218.857 C65.2827,218.857,46.3778,246.52,55.4846,243.89 C60.8314,242.346,60.4605,267.45,60.4605,267.45 L58.2349,306.77 C58.2349,306.77,43.7682,342.009,43.3972,366.492 C43.0263,390.974,42.6553,400.619,48.2194,415.085 C53.7835,429.552,68.9921,461.824,90.8776,478.145 C99.7802,478.516,109.796,480,109.796,480 L113.505,459.227 C113.505,459.227,132.423,475.177,145.777,474.065 C159.131,472.952,145.035,473.323,145.035,473.323 L131.31,455.518 Z" />
|
||||||
<path
|
<path
|
||||||
android:fillColor="#1e110d"
|
android:fillColor="#93d4fa"
|
||||||
android:pathData="M 257 257 H 407 V 407 H 257 V 257 Z" />
|
android:strokeColor="#4c4f59"
|
||||||
<path
|
android:strokeWidth="6.9"
|
||||||
android:fillColor="#1e110d"
|
android:strokeLineJoin="round"
|
||||||
android:pathData="M 393 393 H 543 V 543 H 393 V 393 Z" />
|
android:strokeMiterLimit="1.3"
|
||||||
</group>
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M133.91,110.17 L64.1717,157.65 L82.4357,188.404 L50.8182,244.079 L79.3807,261.142 L94.2186,259.658 L96.4452,204.017 L99.023,199.626 L117.217,177.681 L140.957,127.974 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ace0fe"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.54357"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M217.014,405.828 C217.014,405.828,224.431,379.883,258.18,378.755 C291.929,377.627,311.955,382.891,311.955,382.891 C311.955,382.891,323.081,389.283,329.756,397.555 C336.432,405.827,358.683,438.164,371.293,446.436 C383.902,454.708,386.498,461.852,386.498,461.852 L384.644,473.132 C384.644,473.132,369.809,483.284,353.862,484.788 C337.915,486.292,206.258,484.788,206.258,484.788 L176.218,481.78" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="1.2"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M363.541,444.682 C363.541,444.682,356.647,448.748,358.68,451.488 C360.713,454.228,364.602,454.935,364.602,454.935 C364.602,454.935,369.198,455.2,369.729,451.399 C370.259,447.598,366.724,444.593,366.724,444.593" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="1.2"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M349.677,459.826 C349.677,459.826,354.177,452.576,356.677,454.326 C359.177,456.076,352.427,461.576,352.427,461.576" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="8.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M228.97,465.109 A8.0341015,5.6995392,0,0,1,220.936,470.809 A8.0341015,5.6995392,0,0,1,212.902,465.109 A8.0341015,5.6995392,0,0,1,220.936,459.409 A8.0341015,5.6995392,0,0,1,228.97,465.109 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M220.852,408.918 C220.625,409.655,221.622,410.397,221.054,409.289 C220.495,408.199,221.513,410.375,221.635,410.685 C223.736,416.022,223.599,421.847,225.242,427.328 C225.544,428.335,225.83,429.367,225.836,430.427" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="6.9"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M225.574,436.984 C224.352,441.357,225.651,446.212,227.992,449.836 C230.334,453.462,228.851,458.145,230.558,461.902 C232.274,465.678,232.769,470.295,230.257,474.062 C228.277,477.032,225.018,479.198,223.87,482.677 C223.87,482.677,223.796,483.338,223.796,483.338" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbf3ef"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M259.148,381.902 C259.148,381.902,268.066,397.377,268.328,402.886 C268.59,408.394,300.59,401.05,300.59,401.05 C300.59,401.05,296.131,384.263,293.246,381.64 C290.361,379.017,259.148,381.902,259.148,381.902 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="4.6"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M247.869,386.361 C248.493,387.123,249.181,387.683,248.222,386.467 C247.237,385.218,247.587,385.904,248.316,386.709 C249.718,388.257,250.625,390.115,251.419,392.051 C252.907,395.677,253.575,399.582,255.44,403.076 C256.689,405.416,258.189,407.614,259.411,409.968" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="4.6"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M306.623,386.885 C308.253,392.964,310.665,398.821,313.443,404.459" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#6c9cb2"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M335.738,431.213 C336.508,434.977,338.987,438.481,341.225,442.105 C343.323,445.501,344.561,449.237,346.104,452.901 C348.174,457.813,352.855,461.643,353.803,466.855 C354.723,471.917,359.045,475.752,359.082,481.05" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M258.623,384.262 C258.623,384.262,266.754,391.082,269.902,411.278" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbf3ef"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.9"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M127.233,329.025 C127.233,329.025,124.636,389.488,140.958,404.326 C149.119,396.165,150.973,393.94,150.973,393.94 L163.214,402.472 L168.407,398.021 L170.633,378.361 L175.826,368.346 L181.761,356.105 L173.229,347.573 L157.279,328.284 L153.941,323.462 L149.49,332.736 C149.49,332.736,137.249,332.736,133.54,330.139 C129.831,327.542,127.234,329.026,127.234,329.026 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M291.672,381.377 C291.672,381.377,298.754,387.934,301.902,407.869" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M270.164,404.197 C270.164,404.197,286.164,400.263,297.967,401.574" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M253.902,417.836 C253.902,417.836,291.148,404.721,323.672,408.656 C325.77,412.328,329.442,425.443,317.902,429.64 C313.181,429.64,298.754,428.066,295.345,429.115 C291.935,430.164,282.755,429.64,276.984,433.574 C271.214,437.508,262.295,442.492,258.623,436.722 C254.951,430.952,253.902,424.394,253.902,424.394 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M276.459,482.623 C276.459,482.623,266.754,481.049,277.508,436.197" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fcf6fa"
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M287.213,432.787 L293.508,483.672 L307.41,482.885 L300.59,428.852 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M287.738,430.951 L293.508,481.836" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M300.328,428.066 C300.328,428.066,302.426,465.837,307.672,481.05" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#494d55"
|
||||||
|
android:strokeWidth="5.3"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M313.18,431.213 C313.18,431.213,320.787,458.754,323.41,467.147 C326.033,475.54,315.279,482.885,315.279,482.885" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#bce4fd"
|
||||||
|
android:strokeWidth="8.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M164.239,424.641 L133.168,450.694 L138.176,464.419 L159.134,479.628 L176.219,481.782 L165.09,461.23 L163.544,438.446 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="8.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M163.818,451.101 A8.0341015,5.6995392,0,0,1,155.784,456.801 A8.0341015,5.6995392,0,0,1,147.75,451.101 A8.0341015,5.6995392,0,0,1,155.784,445.401 A8.0341015,5.6995392,0,0,1,163.818,451.101 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:strokeWidth="8.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M338.361,376.131 C338.361,376.131,340.197,407.082,332.066,427.541 C334.951,428.59,346.547,427.807,358.979,420.199 C371.411,412.591,370.361,398.164,370.361,398.164 L372.459,427.016 C372.459,427.016,396.778,398.917,396.684,374.409 C396.59,349.901,395.016,348.327,395.016,348.327 L383.182,347.2 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="2.845"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M339.782,389.859 C339.782,389.859,377.989,382.069,396.165,363.893 C401.729,372.425,404.326,396.536,404.326,396.536 L406.923,409.519 L423.244,346.83 L416.567,341.637 L410.632,324.203 C410.632,324.203,395.423,339.412,383.182,347.201 C370.941,354.991,349.055,366.49,349.055,366.49 L338.298,370.199 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="2.845"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M347.016,369.643 C347.016,369.643,349.242,379.658,345.161,389.488 C341.081,399.318,340.153,398.947,340.153,398.947" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.945"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M380.852,480 C380.852,480,425.442,462.689,440.131,392.918 C446.951,390.295,474.229,378.229,479.475,367.213 C482.098,357.246,475.803,335.213,475.803,335.213 L451.147,335.738 L424.393,340.459 L419.672,352 L411.279,404.459 L398.164,432.787 L382.426,468.984 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="8.74203"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M147.656,277.034 C147.656,277.034,136.529,381.17,275.24,380.421 C413.951,379.672,425.078,280.031,425.078,280.031" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M123.279,147.934 L428.066,169.442 L403.41,129.049 C403.41,129.049,447.476,70.2949,454.295,68.7211 C461.115,67.1473,470.033,58.7539,470.033,58.7539 L456.918,55.0818 L379.803,77.1146 C379.803,77.1146,257.049,43.5408,211.41,70.8195 C165.771,98.0982,141.639,116.983,141.639,116.983 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M331.445,66.6518 L347.674,97.4945 L395.504,128.862 L401.81,129.94 L428.693,94.6046 L396.59,72.3936 L377.705,77.6395 L347.279,66.0985 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ace0fe"
|
||||||
|
android:strokeWidth="14.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M431.034,175.826 L448.097,158.763 L498.545,230.726 L492.61,248.531 L459.225,267.078 L446.613,250.757 L464.418,239.629 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ace0fe"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.945"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M465.902,261.885 C465.902,261.885,501.512,316.413,468.87,335.331 C443.646,339.411,420.648,337.557,420.648,337.557 L431.034,311.22 L452.549,269.304 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#febdc7"
|
||||||
|
android:strokeWidth="4.6"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M471.869,57.7049 C471.869,57.7049,488.918,126.689,460.853,168.131 C453.509,168.393,451.673,157.639,451.673,157.639 L453.771,151.082 L452.722,141.902 L455.083,131.148 L456.919,125.64 L450.624,119.607 L444.067,114.361 L441.182,109.115 L444.067,103.869 L441.444,98.6231 L437.247,95.7379 L434.099,94.1641 L439.345,82.6231 L451.148,75.2788 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ff1c1c"
|
||||||
|
android:fillAlpha="0.0509804"
|
||||||
|
android:strokeWidth="3.92397"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M244.267,326.814 A35.587568,21.480417,0,0,1,208.679,348.294 A35.587568,21.480417,0,0,1,173.091,326.814 A35.587568,21.480417,0,0,1,208.679,305.334 A35.587568,21.480417,0,0,1,244.267,326.814 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ff1c1c"
|
||||||
|
android:fillAlpha="0.05044398"
|
||||||
|
android:strokeWidth="3.65169"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M355.204,336.752 A31.611719,20.942554,0,0,1,323.592,357.695 A31.611719,20.942554,0,0,1,291.98,336.752 A31.611719,20.942554,0,0,1,323.592,315.809 A31.611719,20.942554,0,0,1,355.204,336.752 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbf3ef"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M188.328,343.607 C188.328,343.607,200.394,315.279,204.066,349.902 C209.312,340.984,214.033,332.591,221.377,341.509 C228.197,343.607,236.59,348.853,226.098,363.542 C215.606,378.231,242.436,345.171,241.543,361.909 C240.822,375.421,217.021,408.72,217.021,408.72 C217.021,408.72,210.683,472.905,183.606,478.951 C147.058,487.112,171.54,375.082,171.54,375.082 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbe7e5"
|
||||||
|
android:fillAlpha="0.40581462"
|
||||||
|
android:strokeWidth="10.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M193.631,383.924 A12.612,12.241061,0,0,1,181.019,396.165 A12.612,12.241061,0,0,1,168.407,383.924 A12.612,12.241061,0,0,1,181.019,371.683 A12.612,12.241061,0,0,1,193.631,383.924 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fee4e0"
|
||||||
|
android:fillAlpha="0.42411327"
|
||||||
|
android:strokeWidth="10.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M179.097,356.526 L193.193,335.753 L200.241,337.237 L200.983,350.962 L212.482,339.463 L221.756,343.543 L230.288,349.478 L224.724,364.316 L238.449,359.494 L235.111,377.299 L187.26,349.849 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M188.328,343.607 C188.328,343.607,200.394,315.279,204.066,349.902 C209.312,340.984,214.033,332.591,221.377,341.509 C228.197,343.607,236.59,348.853,226.098,363.542 C215.606,378.231,242.436,345.171,241.543,361.909 C240.822,375.421,217.021,408.72,217.021,408.72 C217.021,408.72,210.683,472.905,183.606,478.951 C147.058,487.112,171.54,375.082,171.54,375.082 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M137.443,123.279 C137.443,123.279,186.782,74.6292,224.42,64.5441 C224.525,65.3118,104.253,-57.6139,137.443,123.279 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="1.18016"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M198.852,42 L135.218,81.0166 L139.059,121.956 L184.828,87 L224,64.5 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0.465732"
|
||||||
|
android:strokeColor="#a18f90"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M404.964,131.773 C405.489,131.004,406,130.224,406.539,129.465 C409.363,125.492,412.359,121.645,415.217,117.696 C417.61,114.388,419.157,112.153,421.508,108.796 C426.834,101.216,432.688,94.0352,438.717,87.009 C441.739,83.4584,444.784,79.9101,448.194,76.7199 C450.156,74.8844,452.413,73.0471,454.468,71.3278 C459.576,66.9703,465.137,63.2182,470.69,59.4657 C470.69,59.4657,467.765,57.6015,467.765,57.6015 L467.765,57.6015 C462.349,61.5016,456.862,65.3066,451.773,69.6416 C449.774,71.287,447.329,73.2528,445.41,75.0108 C441.958,78.1737,438.921,81.7424,435.922,85.3274 C429.967,92.4153,424.289,99.7266,418.922,107.272 C413.451,115.001,407.959,122.727,401.809,129.941 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0.465732"
|
||||||
|
android:strokeColor="#a18f90"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M431.705,96.8851 C432.388,96.8683,433.075,96.8931,433.759,96.9175 C435.025,96.9602,436.284,97.0933,437.535,97.2918 C438.884,97.5112,440.212,97.8397,441.533,98.1893 C442.837,98.5317,444.12,98.9495,445.392,99.3955 C445.74,99.5276,446.281,99.7279,446.624,99.8789 C446.813,99.9624,447.362,100.253,447.184,100.147 C442.264,97.2348,444.346,98.2776,445.168,99.2354 C445.635,100.178,444.914,101.046,444.335,101.751 C443.282,102.866,441.955,103.674,440.684,104.516 C439.979,105.042,438.841,105.512,438.657,106.495 C438.521,107.219,438.804,107.502,439.115,108.14 C439.373,108.455,439.611,108.787,439.889,109.085 C440.52,109.761,441.438,110.538,442.141,111.121 C443.425,112.185,444.754,113.196,446.067,114.223 C448.295,115.955,450.534,117.67,452.508,119.693 C453.753,121.058,454.844,122.554,455.616,124.235 C456.19,125.547,456.235,126.917,456.081,128.315 C455.929,129.857,455.069,131.063,454.111,132.22 C452.86,133.613,451.408,134.8,450.128,136.163 C449.51,136.928,448.934,137.773,448.792,138.77 C448.716,139.301,448.777,139.643,448.823,140.171 C449.005,141.517,449.421,142.813,449.857,144.095 C450.319,145.456,450.958,146.746,451.568,148.044 C452.147,149.17,452.449,150.372,452.547,151.627 C452.576,152.64,452.406,153.643,452.197,154.63 C452.014,155.489,451.806,156.25,451.273,156.96 C450.579,157.686,449.748,158.26,448.962,158.879 C448.962,158.879,452.094,160.848,452.094,160.848 L452.094,160.848 C452.901,160.205,453.758,159.61,454.468,158.856 C455.052,158.078,455.277,157.331,455.473,156.387 C455.691,155.367,455.861,154.331,455.857,153.286 C455.781,151.991,455.511,150.736,454.918,149.57 C454.311,148.282,453.67,147.005,453.196,145.659 C452.758,144.401,452.34,143.13,452.125,141.811 C452.072,141.379,451.995,140.958,452.039,140.519 C452.134,139.578,452.689,138.785,453.257,138.067 C454.534,136.692,455.986,135.496,457.243,134.102 C458.25,132.898,459.168,131.637,459.347,130.028 C459.522,128.576,459.514,127.143,458.951,125.764 C458.207,124.025,457.101,122.494,455.846,121.083 C455.078,120.279,454.934,120.098,454.085,119.342 C452.574,117.998,450.931,116.813,449.361,115.541 C448.052,114.517,446.728,113.509,445.442,112.456 C444.732,111.875,443.869,111.153,443.218,110.494 C442.948,110.22,442.706,109.919,442.45,109.632 C442.2,109.235,441.825,108.834,441.875,108.312 C441.954,107.485,443.212,106.929,443.774,106.494 C445.073,105.627,446.429,104.795,447.505,103.65 C448.192,102.813,448.909,101.854,448.58,100.714 C448.498,100.578,448.435,100.429,448.335,100.306 C448.225,100.172,448.104,100.04,447.956,99.9498 C446.131,98.8402,444.47,97.783,442.482,97.127 C441.204,96.6881,439.915,96.2798,438.606,95.9437 C437.278,95.6019,435.942,95.2832,434.585,95.0766 C433.319,94.8915,432.044,94.7705,430.765,94.7225 C430.077,94.6977,429.373,94.7137,428.694,94.6018 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0.465732"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M472.565,132.892 C472.58,133.665,472.464,134.438,472.369,135.204 C472.142,136.869,471.719,138.496,471.276,140.113 C470.664,142.278,469.96,144.416,469.202,146.534 C468.343,148.936,467.316,151.271,466.158,153.543 C465.033,155.731,463.751,157.831,462.385,159.876 C461.185,161.66,459.873,163.363,458.525,165.037 C457.749,165.984,456.962,166.921,456.176,167.859 C456.176,167.859,459.27,169.717,459.27,169.717 L459.27,169.717 C460.051,168.773,460.833,167.83,461.601,166.875 C462.941,165.183,464.252,163.468,465.446,161.67 C466.811,159.608,468.088,157.491,469.22,155.29 C470.384,153.005,471.417,150.659,472.298,148.249 C473.071,146.13,473.791,143.992,474.423,141.827 C474.89,140.207,475.334,138.577,475.608,136.911 C475.723,136.144,475.823,135.375,475.929,134.607 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M322.623,86.0328 C322.623,86.0328,398.056,112.153,432.787,175.213 C466.23,235.934,465.836,237.639,465.836,237.639 C465.836,237.639,466.361,246.032,445.902,249.18 C443.279,249.18,460.591,280.131,465.836,286.426 C451.147,293.77,449.049,295.344,449.049,295.344 C449.049,295.344,455.344,303.213,453.77,311.082 C436.459,310.557,431.213,310.033,431.213,310.033 C431.213,310.033,427.016,327.344,415.475,343.082 C410.23,333.115,410.23,320,410.23,320 C410.23,320,386.098,356.721,337.836,361.443 C336.262,358.82,350.426,347.279,355.672,333.115 C344.131,334.689,340.983,335.213,340.983,335.213 L351.475,318.426 C351.475,318.426,362.491,294.295,360.918,290.098 C359.869,287.475,328.918,232.393,328.918,232.393 C328.918,232.393,304.262,265.442,285.377,282.229 C278.557,278.032,271.738,267.54,271.738,267.54 L259.148,279.081 C259.148,279.081,210.71,228.317,217.054,188.898 C213.906,200.964,217.181,245.507,211.411,251.278 C206.165,249.18,195.149,236.589,197.247,210.36 C196.722,209.835,167.345,251.803,167.345,251.803 C167.345,251.803,163.148,300.59,183.607,325.246 C185.181,327.869,182.033,341.508,152.132,322.623 C153.181,321.049,151.083,332.59,151.083,332.59 C151.083,332.59,104.394,334.688,105.444,271.738 C102.821,269.115,91.8047,305.836,91.8047,305.836 C91.8047,305.836,67.6735,273.836,91.2801,212.984 C103.083,182.558,114.624,160.132,123.215,145.312 C131.805,130.492,137.445,123.279,137.445,123.279" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fffdfc"
|
||||||
|
android:strokeWidth="7.4278"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M355.672,146.885 A91.803276,41.967213,0,0,1,263.869,188.852 A91.803276,41.967213,0,0,1,172.066,146.885 A91.803276,41.967213,0,0,1,263.869,104.918 A91.803276,41.967213,0,0,1,355.672,146.885 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M349.377,329.443 C349.377,329.443,420.721,287.476,428.066,238.164 C428.066,239.213,454.296,266.492,454.296,266.492 L465.837,290.623 L450.099,297.967 L452.197,311.606 L430.164,310.557 L417.574,340.983 L404.984,323.147 L381.902,349.377 L336.787,364.066 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M325.246,144.787 C325.246,144.787,335.738,188.853,327.344,223.476 C327.344,233.968,360.918,284.328,360.918,284.328 C360.918,284.328,375.607,212.984,335.738,152.131 C327.345,146.885,325.246,144.787,325.246,144.787 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M186.754,166.82 L209.836,167.869 C209.836,167.869,195.147,194.099,196.197,214.033 C194.099,210.885,174.164,245.508,174.164,245.508 C174.164,245.508,164.721,230.819,171.016,195.147 C180.459,178.36,186.754,166.819,186.754,166.819 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fffdfc"
|
||||||
|
android:strokeWidth="6.94619"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M340.28,112.237 A80.289719,41.967213,0,0,1,259.99,154.204 A80.289719,41.967213,0,0,1,179.7,112.237 A80.289719,41.967213,0,0,1,259.99,70.2698 A80.289719,41.967213,0,0,1,340.28,112.237 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#a18f90"
|
||||||
|
android:strokeWidth="7.7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M138.623,122.492 C138.623,122.492,192.262,69.5084,231.607,64.2625" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M436.459,268.066 C436.459,268.066,440.131,286.427,433.836,310.558" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M418.098,305.836 L409.18,323.672" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M377.705,300.59 C377.705,300.59,380.328,312.656,355.672,332.59" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="4.2"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M284.328,97.5738 C284.328,97.5738,296.394,136.918,256.525,216.656 C257.05,216.656,310.033,177.836,312.656,127.476" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="5.1"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M272.787,87.082 C272.787,87.082,286.426,78.6886,291.672,86.5574 C308.845,97.3968,304.705,116.794,315.869,130.951 C317.662,132.804,323.041,130.17,323.672,132.721 C328.553,152.446,338.488,183.527,327.996,232.839" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="4.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M171.004,241.854 C171.004,241.854,142.442,181.762,263.368,94.219 C265.594,94.9609,204.017,148.377,197.34,205.502" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="3"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M327.344,143.738 C327.344,143.738,352.524,164.197,359.344,209.312" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M362.492,268.59 L359.344,288.524" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M421.77,344.131 C421.77,344.131,419.147,402.361,388.196,455.869 C357.245,509.377,426.491,471.607,426.491,471.607" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M395.016,348.328 L407.082,408.656" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M371.934,423.869 C371.934,423.869,402.885,398.164,396.59,349.902" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M332.066,427.541 C332.066,427.541,368.787,429.115,370.886,398.164" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M372.459,427.016 L370.361,398.164" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#93cefc"
|
||||||
|
android:strokeColor="#4d4e59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M377.509,228.61 C377.509,228.61,401.64,230.184,401.64,239.102 C401.115,242.774,390.099,256.938,378.033,257.987 C375.935,256.413,377.508,228.61,377.508,228.61 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fffdfe"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M350.951,235.541 C350.951,235.541,344.394,213.508,352,213.508 C359.607,213.508,365.377,227.41,365.377,227.41 C365.377,227.41,370.436,209.683,375.344,212.197 C387.142,218.241,378.754,233.967,378.754,233.967 C378.754,233.967,397.377,259.934,366.688,261.246 C336.521,262.535,350.95,235.541,350.95,235.541 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#1a1a1a"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M332.066,425.967 C332.066,425.967,342.558,400.787,338.361,376.131" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#e85240"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M192.262,268.852 C192.262,268.852,176.787,290.885,189.639,304.262 C232.393,304.524,232.918,304.787,232.918,304.787 C232.918,304.787,244.197,296.394,238.426,272.787 C212.983,262.82,192.262,268.853,192.262,268.853 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbb579"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M188.066,301.115 C187.624,292.333,201.519,287.099,210.361,286.689 C219.033,286.287,233.601,290.074,233.443,298.755 C233.366,303.017,221.902,304.263,221.902,304.263 C221.902,304.263,188.635,312.429,188.066,301.115 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M217.967,273.049 A7.8688526,7.0819674,0,0,1,210.098,280.131 A7.8688526,7.0819674,0,0,1,202.229,273.049 A7.8688526,7.0819674,0,0,1,210.098,265.967 A7.8688526,7.0819674,0,0,1,217.967,273.049 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#ebc2bf"
|
||||||
|
android:strokeWidth="2.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M174.164,245.508 C189.25,240.742,205.703,238.055,221.258,241.993 C224.556,242.828,227.776,243.986,230.82,245.508" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fde9e7"
|
||||||
|
android:strokeWidth="6.945"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M477.772,132.797 C477.772,132.797,491.126,142.812,492.61,150.231 C494.094,157.65,494.094,207.727,494.094,207.727 L489.643,208.84 L458.855,171.375 C458.855,171.375,467.758,156.908,469.983,148.748 C472.209,140.587,477.773,132.798,477.773,132.798 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#e85240"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M192.262,268.852 C192.262,268.852,176.787,290.885,189.639,304.262 C232.393,304.524,232.918,304.787,232.918,304.787 C232.918,304.787,244.197,296.394,238.426,272.787 C212.983,262.82,192.262,268.853,192.262,268.853 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#e85240"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M325.521,272.819 C342.546,273.885,364.341,295.901,343.357,321.081 C341.783,321.606,294.372,315.775,293.783,311.901 C292.977,306.601,285.826,270.333,325.521,272.819 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fbb579"
|
||||||
|
android:strokeWidth="7.14054"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M293.046,306.321 C295.599,297.786,313.477,296.791,323.835,298.955 C333.994,301.077,349.503,308.913,346.293,317.177 C344.717,321.235,331.038,319.114,331.038,319.114 C331.038,319.114,289.756,317.315,293.045,306.321 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M325.521,272.819 C342.546,273.885,364.341,295.901,343.357,321.081 C341.783,321.606,294.372,315.775,293.783,311.901 C292.977,306.601,285.826,270.333,325.521,272.819 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#ebc2bf"
|
||||||
|
android:strokeWidth="2.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M309.328,258.435 C309.328,258.435,335.558,253.189,346.049,262.632" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M329.634,284.993 A7.8688526,7.0819674,0,0,1,321.765,292.075 A7.8688526,7.0819674,0,0,1,313.896,284.993 A7.8688526,7.0819674,0,0,1,321.765,277.911 A7.8688526,7.0819674,0,0,1,329.634,284.993 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="14.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M170.492,266.492 C170.492,266.492,202.492,246.558,240.787,264.394" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="14.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M292.997,274.177 C292.997,274.177,328.548,261.627,362.085,287.315" />
|
||||||
|
<path
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M431.034,176.197 L449.21,158.763 L490.755,212.92" />
|
||||||
|
<path
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M454.032,267.449 L497.247,243.523" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fff9f6"
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M164.239,424.641 L133.168,450.694 C133.168,450.694,127.975,468.87,159.134,479.627 C190.293,490.384,372.425,481.111,372.425,481.111 C372.425,481.111,424.728,492.981,453.29,444.017 C452.919,444.759,444.387,463.306,444.387,463.306 L445.871,482.595 C445.871,482.595,503.606,473.181,476.327,333.64 C480.524,324.197,484.72,318.427,484.72,318.427 L481.572,296.657 C481.572,296.657,487.23,256.322,489.455,251.128 C491.681,245.935,497.971,244.777,499.099,240 C501.168,231.244,496.317,219.598,492.422,213.849 C491.68,210.511,499.284,178.795,494.462,155.797 C487.414,143.927,489.64,143.927,475.544,130.202 C475.544,130.573,484.447,85.3181,474.802,56.7556 C471.834,56.7556,442.53,45.9983,377.986,80.4958 C377.615,81.6086,351.649,50.4496,224.416,64.5453 C223.674,64.5453,181.016,26.7093,157.647,24.1127 C156.534,23.7418,135.02,20.0323,132.423,73.0769 C132.423,74.1897,88.281,89.0274,76.4109,137.992 C64.5408,186.956,65.2827,218.857,65.2827,218.857 C65.2827,218.857,46.3778,246.52,55.4846,243.89 C60.8314,242.346,60.4605,267.45,60.4605,267.45 L58.2349,306.77 C58.2349,306.77,43.7682,342.009,43.3972,366.492 C43.0263,390.974,42.6553,400.619,48.2194,415.085 C53.7835,429.552,68.9921,461.824,90.8776,478.145 C99.7802,478.516,109.796,480,109.796,480 L113.505,459.227 C113.505,459.227,132.423,475.177,145.777,474.065 C159.131,472.952,145.035,473.323,145.035,473.323 L131.31,455.518 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M197.508,220.066 L215.869,207.738" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#c3b4b0"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M327.541,234.249 C327.541,234.249,321.269,239.154,311.683,233.258" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M322.623,86.0328 C322.623,86.0328,398.056,112.153,432.787,175.213 C466.23,235.934,465.836,237.639,465.836,237.639 C465.836,237.639,466.361,246.032,445.902,249.18 C443.279,249.18,460.591,280.131,465.836,286.426 C451.147,293.77,449.049,295.344,449.049,295.344 C449.049,295.344,455.344,303.213,453.77,311.082 C436.459,310.557,431.213,310.033,431.213,310.033 C431.213,310.033,427.016,327.344,415.475,343.082 C410.23,333.115,410.23,320,410.23,320 C410.23,320,386.098,356.721,337.836,361.443 C336.262,358.82,350.426,347.279,355.672,333.115 C344.131,334.689,340.983,335.213,340.983,335.213 L351.475,318.426 C351.475,318.426,362.491,294.295,360.918,290.098 C359.869,287.475,328.918,232.393,328.918,232.393 C328.918,232.393,304.262,265.442,285.377,282.229 C278.557,278.032,271.738,267.54,271.738,267.54 L259.148,279.081 C259.148,279.081,210.71,228.317,217.054,188.898 C213.906,200.964,217.181,245.507,211.411,251.278 C206.165,249.18,195.149,236.589,197.247,210.36 C196.722,209.835,167.345,251.803,167.345,251.803 C167.345,251.803,163.148,300.59,183.607,325.246 C185.181,327.869,182.033,341.508,152.132,322.623 C153.181,321.049,151.083,332.59,151.083,332.59 C151.083,332.59,104.394,334.688,105.444,271.738 C102.821,269.115,91.8047,305.836,91.8047,305.836 C91.8047,305.836,67.6735,273.836,91.2801,212.984 C103.083,182.558,114.624,160.132,123.215,145.312 C131.805,130.492,137.445,123.279,137.445,123.279" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#a88a8f"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="2.8623"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M216.292,255.539 A8.8904896,7.4928694,0,0,1,207.402,263.032 A8.8904896,7.4928694,0,0,1,198.512,255.539 A8.8904896,7.4928694,0,0,1,207.402,248.046 A8.8904896,7.4928694,0,0,1,216.292,255.539 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#a88a8f"
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="2.8623"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M336.169,270.547 A8.8904896,7.4928694,0,0,1,327.279,278.04 A8.8904896,7.4928694,0,0,1,318.389,270.547 A8.8904896,7.4928694,0,0,1,327.279,263.054 A8.8904896,7.4928694,0,0,1,336.169,270.547 Z" />
|
||||||
|
<path
|
||||||
|
android:fillAlpha="0"
|
||||||
|
android:strokeColor="#a18f90"
|
||||||
|
android:strokeWidth="10.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M318.719,85.4618 C318.719,85.4618,369.167,102.525,395.504,128.862 C421.841,155.199,428.147,168.182,428.147,168.182" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="6.5"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M186.754,224.525 L197.246,225.574" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#fcbeb5"
|
||||||
|
android:strokeColor="#e99c9b"
|
||||||
|
android:strokeWidth="3.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M250.942,349.983 C250.942,349.983,237.032,341.08,240.927,333.291 C244.822,325.501,258.732,328.84,258.732,328.84 C258.732,328.84,271.715,327.542,278.763,324.945 C285.811,322.348,288.407,329.953,288.407,329.953 C288.407,329.953,293.172,336.018,284.141,346.46 C278.206,353.322,262.997,353.508,262.997,353.508" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e99c9b"
|
||||||
|
android:strokeWidth="1.8"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M276.209,325.765 C276.209,325.765,280.559,328.784,281.584,333.717 C282.155,333.823,284.918,330.63,284.56,326.844 C283.88,325.359,276.209,325.764,276.209,325.764 Z" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e99c9b"
|
||||||
|
android:strokeWidth="1.8"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M245.007,329.396 L240.834,332.178 L240.741,338.206 L240.645,338.171 L247.718,329.354 Z" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#e99c9b"
|
||||||
|
android:strokeWidth="3.4"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M250.942,349.983 C250.942,349.983,237.032,341.08,240.927,333.291 C244.822,325.501,258.732,328.84,258.732,328.84 C258.732,328.84,271.715,327.542,278.763,324.945 C285.811,322.348,288.407,329.953,288.407,329.953 C288.407,329.953,293.172,336.018,284.141,346.46 C278.206,353.322,262.997,353.508,262.997,353.508" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M190.849,314.929 L196.97,329.952" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M204.945,316.969 L210.509,331.25" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M217.928,317.34 L225.347,333.847" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M300.648,328.468 L307.51,346.644" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M312.703,329.21 L319.38,346.273" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:strokeColor="#e89493"
|
||||||
|
android:strokeWidth="2.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M326.243,328.654 L333.291,346.645" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#e49589"
|
||||||
|
android:strokeWidth="4.6"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M218.492,348.984 C216.619,350.289,215.156,352.098,213.789,353.9 C212.764,355.251,211.787,356.65,211.017,358.164" />
|
||||||
|
<path
|
||||||
|
android:strokeColor="#4c4f59"
|
||||||
|
android:strokeWidth="3.2"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M127.475,375.082 C127.475,375.082,113.049,355.934,115.409,315.541" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:fillAlpha="0.734285"
|
||||||
|
android:strokeColor="#c1545a"
|
||||||
|
android:strokeWidth="7.8"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M136.393,322.098 C136.393,322.098,145.836,303.213,132.196,282.229 C129.048,281.704,159.999,254.426,137.442,205.114 C135.868,205.639,161.049,149.507,113.311,122.229 C109.114,113.836,67.6717,52.9831,24.1307,135.344 C24.1307,146.885,23.0815,171.541,23.0815,171.541 C23.0815,171.541,8.393,210.361,16.7864,243.41 C18.8848,246.558,-4.1972,293.246,27.8028,349.902 C28.3274,350.427,11.0159,407.607,40.393,432.787 C41.4422,437.508,54.0324,466.361,82.8848,472.131 C95.475,472.656,102.295,471.606,102.295,471.606 C102.295,471.606,133.77,466.885,150.033,404.458 C147.935,376.655,145.836,354.097,139.017,333.638" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:fillAlpha="0.734285"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="9"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M109.698,219.489 C109.698,219.489,94.4894,207.619,88.5543,199.829 M51.4602,219.86 L73.7167,197.974 M74.0876,183.878 L80.0227,225.794 M44.7833,201.683 L100.795,196.861 M111.923,179.427 L92.634,179.798 M92.2631,179.056 L90.7793,149.381 M51.8305,152.719 L89.6665,149.751 M64.8134,138.252 L65.5553,177.943" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#ffffff"
|
||||||
|
android:fillAlpha="0.734285"
|
||||||
|
android:strokeColor="#000000"
|
||||||
|
android:strokeWidth="9"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeMiterLimit="1.3"
|
||||||
|
android:strokeLineCap="round"
|
||||||
|
android:pathData="M58.5078,352.286 L112.665,348.948 M66.2973,335.223 L101.908,332.255 M80.3934,299.983 L82.99,333.368 M64.072,317.047 L101.166,313.709 M102.65,332.256 L103.392,298.5 M103.021,298.871 L62.2175,301.097 M62.2175,300.726 L66.6688,334.111 M94.1184,285.889 L97.4569,271.422 M97.4569,269.938 L70.0072,271.422 M68.5234,286.26 L69.2653,266.229" />
|
||||||
|
<path
|
||||||
|
android:fillColor="#d96477"
|
||||||
|
android:strokeWidth="0.00475452"
|
||||||
|
android:pathData="M69.454,376.47 C65.2333,376.691,61.3746,378.322,58.6708,381.019 C55.6903,384.001,54.4288,388.12,55.1367,392.567 C56.0415,398.241,59.9003,404.306,66.5213,410.469 C67.9264,411.773,68.9164,412.618,70.9123,414.211 C74.4198,417.006,77.5919,419.223,81.9616,421.92 C83.5211,422.888,86.5974,424.685,87.7577,425.309 L88.093,425.492 L88.5827,425.224 C90.3657,424.243,93.5432,422.361,95.4273,421.172 C102.554,416.674,108.26,412.159,112.491,407.666 C119.352,400.378,122.268,393.281,120.922,387.173 C119.991,382.968,116.877,379.49,112.459,377.723 C110.559,376.963,108.712,376.568,106.62,376.474 C103.911,376.351,101.244,376.814,98.7003,377.846 C94.3679,379.6,90.7486,383.019,88.4706,387.513 C88.3109,387.827,88.1619,388.103,88.1406,388.12 C88.0714,388.175,87.9969,388.069,87.7095,387.491 C87.0282,386.132,85.6923,384.157,84.6438,382.968 C83.5687,381.741,81.8389,380.245,80.5509,379.426 C77.2244,377.307,73.3284,376.27,69.4537,376.47 Z" />
|
||||||
|
</group>
|
||||||
</vector>
|
</vector>
|
||||||
@@ -1,22 +1,27 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:width="108dp"
|
android:width="512dp"
|
||||||
android:height="108dp"
|
android:height="512dp"
|
||||||
android:viewportWidth="108"
|
android:viewportWidth="512"
|
||||||
android:viewportHeight="108">
|
android:viewportHeight="512">
|
||||||
|
<path
|
||||||
<group
|
android:pathData="m212.06,292.39c0,0 -14.77,-11.53 -20.53,-19.09m-36.03,19.45 l21.62,-21.26m0.36,-13.69 l5.76,40.71m-34.22,-23.42 l54.4,-4.68m10.81,-16.93 l-18.73,0.36m-0.36,-0.72 l-1.44,-28.82m-37.83,3.24 l36.75,-2.88m-24.14,-11.17 l0.72,38.55"
|
||||||
android:scaleX="0.135"
|
android:strokeLineJoin="round"
|
||||||
android:scaleY="0.135">
|
android:strokeWidth="8.74077"
|
||||||
<path
|
android:fillColor="#ffffff"
|
||||||
android:pathData="M 259 259 H 541 V 541 H 259 V 259 Z"
|
android:strokeColor="#000000"
|
||||||
android:strokeWidth="18"
|
android:fillAlpha="0.734285"
|
||||||
android:strokeColor="#000000" />
|
android:strokeLineCap="round"/>
|
||||||
<path
|
<path
|
||||||
android:fillColor="#000000"
|
android:pathData="m239.47,294.6 l48.58,-2.99m-41.59,-12.31 l31.94,-2.66m-19.3,-28.95 l2.33,29.94m-16.97,-14.64 l33.27,-2.99m1.33,16.64 l0.67,-30.28m-0.33,0.33 l-36.6,2m0,-0.33 l3.99,29.94m24.62,-43.25 l2.99,-12.98m0,-1.33 l-24.62,1.33m-1.33,13.31 l0.67,-17.97"
|
||||||
android:pathData="M 257 257 H 407 V 407 H 257 V 257 Z" />
|
android:strokeLineJoin="round"
|
||||||
<path
|
android:strokeWidth="8.07261"
|
||||||
android:fillColor="#000000"
|
android:fillColor="#ffffff"
|
||||||
android:pathData="M 393 393 H 543 V 543 H 393 V 393 Z" />
|
android:strokeColor="#000000"
|
||||||
</group>
|
android:fillAlpha="0.734285"
|
||||||
</vector>
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="m319.56,229.67c-3.9,0.24 -7.46,1.99 -9.95,4.89 -2.75,3.2 -3.91,7.63 -3.26,12.41 0.84,6.1 4.4,12.62 10.51,19.24 1.3,1.4 2.21,2.31 4.05,4.02 3.24,3 6.16,5.39 10.2,8.29 1.44,1.04 4.28,2.97 5.35,3.64l0.31,0.2 0.45,-0.29c1.65,-1.05 4.58,-3.08 6.32,-4.36 6.58,-4.83 11.84,-9.69 15.75,-14.52 6.33,-7.83 9.02,-15.46 7.78,-22.03 -0.86,-4.52 -3.73,-8.26 -7.81,-10.16 -1.75,-0.82 -3.46,-1.24 -5.39,-1.34 -2.5,-0.13 -4.96,0.37 -7.31,1.47 -4,1.89 -7.34,5.56 -9.44,10.39 -0.15,0.34 -0.28,0.63 -0.3,0.65 -0.06,0.06 -0.13,-0.05 -0.4,-0.68 -0.63,-1.46 -1.86,-3.58 -2.83,-4.86 -0.99,-1.32 -2.59,-2.93 -3.78,-3.81 -3.07,-2.28 -6.67,-3.39 -10.24,-3.18z"
|
||||||
|
android:strokeWidth="0.00473542"
|
||||||
|
android:fillColor="#000000"
|
||||||
|
android:strokeColor="#00000000"/>
|
||||||
|
</vector>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/ic_launcher_background" />
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||||
<monochrome android:drawable="@drawable/ic_launcher_monochrome" />
|
<monochrome android:drawable="@drawable/ic_launcher_monochrome" />
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
|
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||||
|
</adaptive-icon>
|
||||||
|
Before Width: | Height: | Size: 235 B |
BIN
manager/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
manager/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 313 B |
|
Before Width: | Height: | Size: 380 B |
BIN
manager/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
manager/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 284 B |
BIN
manager/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
manager/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 304 B |
BIN
manager/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
manager/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 342 B |
BIN
manager/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
manager/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
@@ -11,7 +11,7 @@
|
|||||||
<string name="home_unsupported_reason">KernelSU يدعم GKI kernels فقط</string>
|
<string name="home_unsupported_reason">KernelSU يدعم GKI kernels فقط</string>
|
||||||
<string name="home_kernel">إصدار النواة</string>
|
<string name="home_kernel">إصدار النواة</string>
|
||||||
<string name="home_susfs">SuSFS: %s</string>
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
<string name="home_susfs_version">SuSFS Version</string>
|
<string name="home_susfs_version">إصدار SuSFS</string>
|
||||||
<string name="home_susfs_sus_su">SuS SU</string>
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">إصدار المدير</string>
|
<string name="home_manager_version">إصدار المدير</string>
|
||||||
<string name="home_fingerprint">البصمة</string>
|
<string name="home_fingerprint">البصمة</string>
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
<string name="module_sort_action_first">فرز (الإجراء أولاً)</string>
|
<string name="module_sort_action_first">فرز (الإجراء أولاً)</string>
|
||||||
<string name="module_sort_enabled_first">فرز (الممكن أولاً)</string>
|
<string name="module_sort_enabled_first">فرز (الممكن أولاً)</string>
|
||||||
<string name="uninstall">إلغاء التثبيت</string>
|
<string name="uninstall">إلغاء التثبيت</string>
|
||||||
<string name="restore">Restore</string>
|
<string name="restore">إسترجاع</string>
|
||||||
<string name="module_install">تثبيت الوحدة</string>
|
<string name="module_install">تثبيت الوحدة</string>
|
||||||
<string name="install">تثبيت</string>
|
<string name="install">تثبيت</string>
|
||||||
<string name="reboot">إعادة تشغيل</string>
|
<string name="reboot">إعادة تشغيل</string>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">تعرف على كيفية تثبيت KernelSU واستخدام الإضافات</string>
|
<string name="home_click_to_learn_kernelsu">تعرف على كيفية تثبيت KernelSU واستخدام الإضافات</string>
|
||||||
<string name="home_support_title">إدعمنا</string>
|
<string name="home_support_title">إدعمنا</string>
|
||||||
<string name="home_support_content">KernelSU سيظل دائماً مجانياً ومفتوح المصدر. مع ذلك، يمكنك أن تظهر لنا أنك تهتم بالتبرع.</string>
|
<string name="home_support_content">KernelSU سيظل دائماً مجانياً ومفتوح المصدر. مع ذلك، يمكنك أن تظهر لنا أنك تهتم بالتبرع.</string>
|
||||||
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
<string name="about_source_code"><![CDATA[أنظر إلى مصدر البرمجة في %1$s<br/>إنضم إلى قناتنا في %2$s ]]></string>
|
||||||
<string name="profile_default">الإفتراضي</string>
|
<string name="profile_default">الإفتراضي</string>
|
||||||
<string name="profile_template">نموذج</string>
|
<string name="profile_template">نموذج</string>
|
||||||
<string name="profile_custom">مُخصّص</string>
|
<string name="profile_custom">مُخصّص</string>
|
||||||
@@ -70,10 +70,10 @@
|
|||||||
<string name="profile_selinux_context">سياق SELinux</string>
|
<string name="profile_selinux_context">سياق SELinux</string>
|
||||||
<string name="profile_umount_modules">الغاء تحميل الإضافات</string>
|
<string name="profile_umount_modules">الغاء تحميل الإضافات</string>
|
||||||
<string name="failed_to_update_app_profile">فشل تحديث ملف تعريف التطبيق لـ %s</string>
|
<string name="failed_to_update_app_profile">فشل تحديث ملف تعريف التطبيق لـ %s</string>
|
||||||
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
<string name="require_kernel_version" formatted="false">إصدار KernelSU الحالي %d منخفض جدًا بحيث لا يعمل المدير بشكل صحيح. الرجاء الترقية إلى الإصدار %d أو أعلى!</string>
|
||||||
<string name="settings_umount_modules_default">الغاء تحميل الإضافات بشكل افتراضي</string>
|
<string name="settings_umount_modules_default">الغاء تحميل الإضافات بشكل افتراضي</string>
|
||||||
<string name="settings_umount_modules_default_summary">القيمة الافتراضية العامة لـ\"إلغاء تحميل الإضافات\" في ملفات تعريف التطبيقات. إذا تم تمكينه، إزالة جميع تعديلات الإضافات على النظام للتطبيقات التي لا تحتوي على مجموعة ملف تعريف.</string>
|
<string name="settings_umount_modules_default_summary">القيمة الافتراضية العامة لـ\"إلغاء تحميل الإضافات\" في ملفات تعريف التطبيقات. إذا تم تمكينه، إزالة جميع تعديلات الإضافات على النظام للتطبيقات التي لا تحتوي على مجموعة ملف تعريف.</string>
|
||||||
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
<string name="settings_susfs_toggle">تعطيل روابط kprobe</string>
|
||||||
<string name="profile_umount_modules_summary">سيسمح تمكين هذا الخيار لـKernelSU باستعادة أي ملفات معدلة بواسطة الإضافات لهذا التطبيق.</string>
|
<string name="profile_umount_modules_summary">سيسمح تمكين هذا الخيار لـKernelSU باستعادة أي ملفات معدلة بواسطة الإضافات لهذا التطبيق.</string>
|
||||||
<string name="profile_selinux_domain">المجال</string>
|
<string name="profile_selinux_domain">المجال</string>
|
||||||
<string name="profile_selinux_rules">القواعد</string>
|
<string name="profile_selinux_rules">القواعد</string>
|
||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">فشل في منح صلاحية الجذر!</string>
|
<string name="grant_root_failed">فشل في منح صلاحية الجذر!</string>
|
||||||
<string name="action">إجراء</string>
|
<string name="action">إجراء</string>
|
||||||
<string name="open">فتح</string>
|
<string name="open">فتح</string>
|
||||||
|
<string name="close">إغلاق</string>
|
||||||
<string name="enable_web_debugging">تمكين تصحيح أخطاء WebView</string>
|
<string name="enable_web_debugging">تمكين تصحيح أخطاء WebView</string>
|
||||||
<string name="enable_web_debugging_summary">يمكن استخدامه لتصحيح أخطاء WebUI، يرجى تمكينه فقط عند الحاجة.</string>
|
<string name="enable_web_debugging_summary">يمكن استخدامه لتصحيح أخطاء WebUI، يرجى تمكينه فقط عند الحاجة.</string>
|
||||||
<string name="direct_install">تثبيت مباشر (موصى به)</string>
|
<string name="direct_install">تثبيت مباشر (موصى به)</string>
|
||||||
@@ -137,234 +138,236 @@
|
|||||||
<string name="selected_lkm">LKM المحددة: %s</string>
|
<string name="selected_lkm">LKM المحددة: %s</string>
|
||||||
<string name="save_log">حفظ السجلات</string>
|
<string name="save_log">حفظ السجلات</string>
|
||||||
<string name="log_saved">السجلات محفوظة</string>
|
<string name="log_saved">السجلات محفوظة</string>
|
||||||
<string name="status_supported">Supported</string>
|
<string name="status_supported">إدعمنا</string>
|
||||||
<string name="status_not_supported">Not Supported</string>
|
<string name="status_not_supported">غير مدعوم</string>
|
||||||
<string name="status_unknown">Unknown</string>
|
<string name="status_unknown">غير معروف</string>
|
||||||
<string name="sus_su_mode">SuS SU mode:</string>
|
<string name="sus_su_mode">وضع SuS SU</string>
|
||||||
<!-- Module related -->
|
<!-- Module related -->
|
||||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
<string name="module_install_confirm">تأكيد وحدة التثبيت %1$s؟</string>
|
||||||
<string name="unknown_module">unknown module</string>
|
<string name="unknown_module">وحدة غير معروفة</string>
|
||||||
<!-- Restore related -->
|
<!-- Restore related -->
|
||||||
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
<string name="restore_confirm_title">تأكيد استعادة الوحدة</string>
|
||||||
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
<string name="restore_confirm_message">هذه العملية سوف تستبدل جميع الوحدات الموجودة. هل تريد المتابعة؟</string>
|
||||||
<string name="confirm">Confirm</string>
|
<string name="confirm">تأكيد</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">إلغاء</string>
|
||||||
<!-- Backup related -->
|
<!-- Backup related -->
|
||||||
<string name="backup_success">Backup successful (tar.gz)</string>
|
<string name="backup_success">النسخ الاحتياطي ناجح (tar.gz)</string>
|
||||||
<string name="backup_failed">Backup failed: %1$s</string>
|
<string name="backup_failed">فشل النسخ الاحتياطي: %1$s</string>
|
||||||
<string name="backup_modules">backup modules</string>
|
<string name="backup_modules">وحدات النسخ الاحتياطي</string>
|
||||||
<string name="restore_modules">restore modules</string>
|
<string name="restore_modules">استعادة الوحدات</string>
|
||||||
<!-- Restore related messages -->
|
<!-- Restore related messages -->
|
||||||
<string name="restore_success">Modules restored successfully, restart required</string>
|
<string name="restore_success">تم استعادة الوحدات بنجاح, إعادة التشغيل مطلوبة</string>
|
||||||
<string name="restore_failed">Restore failed: %1$s</string>
|
<string name="restore_failed">فشل الاستعادة: %1$s</string>
|
||||||
<string name="restart_now">Restart Now</string>
|
<string name="restart_now">أعد تشغيل التطبيق الآن</string>
|
||||||
<string name="unknown_error">Unknown error</string>
|
<string name="unknown_error">خطأ غير معروف</string>
|
||||||
<!-- Command related -->
|
<!-- Command related -->
|
||||||
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
<string name="command_execution_failed">فشل تنفيذ الأوامر: %1$s</string>
|
||||||
<!-- Allowlist related -->
|
<!-- Allowlist related -->
|
||||||
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
<string name="allowlist_backup_success">السماح بالنسخ الاحتياطي للقائمة بنجاح</string>
|
||||||
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
<string name="allowlist_backup_failed">فشل النسخ الاحتياطي لقائمة السماح: %1$s</string>
|
||||||
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
<string name="allowlist_restore_confirm_title">تأكيد استعادة القائمة المسموح بها</string>
|
||||||
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
<string name="allowlist_restore_confirm_message">هذه العملية ستقوم بالكتابة فوق قائمة المسموح بها. هل تريد المتابعة؟</string>
|
||||||
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
<string name="allowlist_restore_success">تمت استعادة القائمة بنجاح</string>
|
||||||
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
<string name="allowlist_restore_failed">فشل استعادة القائمة المسموحة: %1$s</string>
|
||||||
<string name="backup_allowlist">Backup Allowlist</string>
|
<string name="backup_allowlist">قائمة النسخ الاحتياطي</string>
|
||||||
<string name="restore_allowlist">Restore Allowlist</string>
|
<string name="restore_allowlist">استعادة قائمة المسموح بها</string>
|
||||||
<string name="settings_custom_background">Custom App Background</string>
|
<string name="settings_custom_background">خلفية التطبيق المخصصة</string>
|
||||||
<string name="settings_custom_background_summary">Select an image as background</string>
|
<string name="settings_custom_background_summary">حدد صورة كخلفية</string>
|
||||||
<string name="settings_card_alpha">Navigation bar transparency</string>
|
<string name="settings_card_alpha">شفافية شريط التنقل</string>
|
||||||
<string name="settings_restore_default">Restore default</string>
|
<string name="settings_restore_default">استعادة الإعدادات الافتراضية</string>
|
||||||
<string name="home_android_version">Android version</string>
|
<string name="home_android_version">إصدار Android</string>
|
||||||
<string name="home_device_model">Device model</string>
|
<string name="home_device_model">نوع الجهاز</string>
|
||||||
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
<string name="su_not_allowed">لا يسمح بمنح المستخدم المتميز ل %s</string>
|
||||||
<string name="settings_disable_su">Disable su compatibility</string>
|
<string name="settings_disable_su">تعطيل توافق su</string>
|
||||||
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
<string name="settings_disable_su_summary">تعطيل أي تطبيقات مؤقتًا من الحصول على امتيازات الجذر عن طريق الأمر <unk> su (لن تتأثر عمليات الجذر الحالية).</string>
|
||||||
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
<string name="using_mksu_manager">أنت تستخدم مدير Beta SukiSU</string>
|
||||||
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
<string name="module_install_multiple_confirm">هل أنت متأكد من أنك تريد تثبيت وحدات %d المحددة؟</string>
|
||||||
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
<string name="module_install_multiple_confirm_with_names">هل أنت متأكد من أنك تريد تثبيت وحدات %1$d التالية؟ \n\n%2$s</string>
|
||||||
<string name="more_settings">More settings</string>
|
<string name="more_settings">المزيد من الإعدادات</string>
|
||||||
<string name="selinux">SELinux</string>
|
<string name="selinux">SELinux</string>
|
||||||
<string name="selinux_enabled">Enabled</string>
|
<string name="selinux_enabled">مفعّل</string>
|
||||||
<string name="selinux_disabled">Disabled</string>
|
<string name="selinux_disabled">رفض</string>
|
||||||
<string name="simple_mode">Simplicity mode</string>
|
<string name="simple_mode">وضع البساطة</string>
|
||||||
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
<string name="simple_mode_summary">إخفاء البطاقات غير الضرورية عند تشغيلها</string>
|
||||||
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version">إخفاء إصدار النواة</string>
|
||||||
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version_summary">إخفاء إصدار النواة</string>
|
||||||
<string name="hide_other_info">Hide other info</string>
|
<string name="hide_other_info">إخفاء معلومات أخرى</string>
|
||||||
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
<string name="hide_other_info_summary">يخفي معلومات عن عدد المستخدمين المتميزين والوحدات ووحدات KPM على الصفحة الرئيسية</string>
|
||||||
<string name="hide_susfs_status">Hide SuSFS status</string>
|
<string name="hide_susfs_status">إخفاء حالة SuSFS</string>
|
||||||
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
<string name="hide_susfs_status_summary">إخفاء معلومات حالة SuSFS على الصفحة الرئيسية</string>
|
||||||
<string name="hide_link_card">Hide Link Card Status</string>
|
<string name="hide_link_card">إخفاء حالة بطاقة الرابط</string>
|
||||||
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
<string name="hide_link_card_summary">إخفاء معلومات البطاقة في الصفحة الرئيسية</string>
|
||||||
<string name="theme_mode">Theme</string>
|
<string name="theme_mode">الثيم</string>
|
||||||
<string name="theme_follow_system">Follow system</string>
|
<string name="theme_follow_system">اتبّاع النظام</string>
|
||||||
<string name="theme_light">Light</string>
|
<string name="theme_light">فاتح</string>
|
||||||
<string name="theme_dark">Dark</string>
|
<string name="theme_dark">مظلم</string>
|
||||||
<string name="manual_hook">Manual Hook</string>
|
<string name="manual_hook">ربط يدوي</string>
|
||||||
<string name="dynamic_color_title">Dynamic colours</string>
|
<string name="dynamic_color_title">لون ديناميكية</string>
|
||||||
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
<string name="dynamic_color_summary">الألوان الديناميكية باستخدام سمات النظام</string>
|
||||||
<string name="choose_theme_color">Choose a theme colour</string>
|
<string name="choose_theme_color">اختر لون السمة</string>
|
||||||
<string name="color_default">Blue</string>
|
<string name="color_default">أزرق</string>
|
||||||
<string name="color_green">Green</string>
|
<string name="color_green">أخضر</string>
|
||||||
<string name="color_purple">Purple</string>
|
<string name="color_purple">أرجواني</string>
|
||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">برتقالي</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">وردي</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">رمادي</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">الأصفر</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">خيارات الفرشاة</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">حدد الملف المراد إلفاؤه</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Anykernel3 yükle</string>
|
||||||
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
<string name="horizon_kernel_summary">فلاش AnyKernel3 ملف kernel</string>
|
||||||
<string name="root_required">Requires root privileges</string>
|
<string name="root_required">يتطلب امتيازات الجذر</string>
|
||||||
<string name="copy_failed">File Copy Failure</string>
|
<string name="copy_failed">فشل نسخ الملف</string>
|
||||||
<string name="reboot_complete_title">Scrubbing complete</string>
|
<string name="reboot_complete_title">اكتمل التشويش</string>
|
||||||
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
<string name="reboot_complete_msg">هل تريد إعادة التشغيل فوراً؟</string>
|
||||||
<string name="yes">Yes</string>
|
<string name="yes">نعم</string>
|
||||||
<string name="no">No</string>
|
<string name="no">لايوجد</string>
|
||||||
<string name="failed_reboot">Reboot Failed</string>
|
<string name="failed_reboot">فشل إعادة التشغيل</string>
|
||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">التمكين</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">السحب</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">النسخ الاحتياطية</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">لا توجد وحدات نواة مثبتة في هذا الوقت</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">الإصدار</string>
|
||||||
<string name="kpm_author">Author</string>
|
<string name="kpm_author">المؤلف</string>
|
||||||
<string name="kpm_uninstall">Uninstall</string>
|
<string name="kpm_uninstall">إلغاء التثبيت</string>
|
||||||
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
<string name="kpm_uninstall_success">تم إلغاء التثبيت بنجاح</string>
|
||||||
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
<string name="kpm_uninstall_failed">فشل في إلغاء التثبيت</string>
|
||||||
<string name="kpm_install">Install</string>
|
<string name="kpm_install">تثبيت</string>
|
||||||
<string name="kpm_install_success">Load of kpm module successful</string>
|
<string name="kpm_install_success">تم تحميل وحدة كيلو جزء بنجاح</string>
|
||||||
<string name="kpm_install_failed">Load of kpm module failed</string>
|
<string name="kpm_install_failed">فشل تحميل وحدة كيلو بايم</string>
|
||||||
<string name="kpm_args">Parameters</string>
|
<string name="kpm_args">العوامل المتغيرة</string>
|
||||||
<string name="kpm_control">Execute</string>
|
<string name="kpm_control">تنفيذ</string>
|
||||||
<string name="home_kpm_version">KPM Version</string>
|
<string name="home_kpm_version">إصدار KPM</string>
|
||||||
<string name="close_notice">Close</string>
|
<string name="close_notice">إغلاق</string>
|
||||||
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
<string name="kernel_module_notice">تم تطوير وظائف نواة الوحدة النمطية التالية بواسطة KernelPatch وتعديلها لتشمل وظائف نواة الوحدة النمطية لـ SukiSU Ultra</string>
|
||||||
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
<string name="home_ContributionCard_kernelsu">سوكيسو أولترا تتطلع إلى الأمام</string>
|
||||||
<string name="kpm_control_success">Success</string>
|
<string name="kpm_control_success">نجحت</string>
|
||||||
<string name="kpm_control_failed">Failed</string>
|
<string name="kpm_control_failed">فشل</string>
|
||||||
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
<string name="home_click_to_ContributionCard_kernelsu">وستشكل سوكيسو أولترا في المستقبل فرعا مستقلا نسبيا من فروع الوحدة، ولكننا لا نزال نقدر كيرنيل سو وموكسو الرسميين وما إلى ذلك. لإسهاماتهم!</string>
|
||||||
<string name="not_supported">Unsupported</string>
|
<string name="not_supported">غير مدعوم</string>
|
||||||
<string name="supported">Supported</string>
|
<string name="supported">إدعمنا</string>
|
||||||
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
<string name="home_kpm_module">"عدد وحدات KPM: %d "</string>
|
||||||
<string name="kpm_invalid_file">Invalid KPM file</string>
|
<string name="kpm_invalid_file">ملف KPM غير صحيح</string>
|
||||||
<string name="kernel_patched">Kernel not patched</string>
|
<string name="kernel_patched">النواة غير مصحوبة</string>
|
||||||
<string name="kernel_not_enabled">Kernel not configured</string>
|
<string name="kernel_not_enabled">لم يتم تكوين النواة</string>
|
||||||
<string name="custom_settings">Custom settings</string>
|
<string name="custom_settings">الإعدادات المُخصصة</string>
|
||||||
<string name="kpm_install_mode">KPM Install</string>
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
<string name="kpm_install_mode_load">Load</string>
|
<string name="kpm_install_mode_load">التحميل</string>
|
||||||
<string name="kpm_install_mode_embed">Embed</string>
|
<string name="kpm_install_mode_embed">فسيفساء</string>
|
||||||
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
<string name="kpm_install_mode_description">الرجاء التحديد: %1\$s وضع تثبيت الوحدة \n\nالتحميل: قم بتحميل الوحدة \nمؤقتا: تثبيت دائم في النظام</string>
|
||||||
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
<string name="log_failed_to_check_module_file">فشل التحقق من وجود ملف الوحدة</string>
|
||||||
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
<string name="snackbar_failed_to_check_module_file">غير قادر على التحقق من وجود ملف الوحدة</string>
|
||||||
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
<string name="confirm_uninstall_title">تأكيد إلغاء التثبيت</string>
|
||||||
<string name="confirm_uninstall_confirm">Uninstall</string>
|
<string name="confirm_uninstall_confirm">إلغاء التثبيت</string>
|
||||||
<string name="confirm_uninstall_dismiss">Cancel</string>
|
<string name="confirm_uninstall_dismiss">إلغاء</string>
|
||||||
<string name="theme_color">Theme Color</string>
|
<string name="theme_color">ألوان المظهر</string>
|
||||||
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
<string name="invalid_file_type">نوع الملف غير صحيح! الرجاء تحديد ملف .kpm.</string>
|
||||||
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
<string name="confirm_uninstall_title_with_filename">إلغاء التثبيت</string>
|
||||||
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
<string name="confirm_uninstall_content">سيتم إلغاء تثبيت KPM التالية: %s</string>
|
||||||
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
<string name="settings_susfs_toggle_summary">تعطيل روابط kprobe التي أنشأتها KernelSU، باستخدام الروابط الواردة بدلاً من ذلك، والتي تشبه طريقة الربط غير GKI غير GKI.</string>
|
||||||
<string name="image_editor_title">Adjust background image</string>
|
<string name="image_editor_title">ضبط صورة الخلفية</string>
|
||||||
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
<string name="image_editor_hint">استخدم إصبعين لتكبير الصورة، وأصبع واحد لسحبها لضبط الموضع</string>
|
||||||
<string name="background_image_error">Could not load image</string>
|
<string name="background_image_error">تعذر تحميل الصورة</string>
|
||||||
<string name="reprovision">Reprovision</string>
|
<string name="reprovision">إعادة</string>
|
||||||
<!-- Kernel Flash Progress Related -->
|
<!-- Kernel Flash Progress Related -->
|
||||||
<string name="horizon_flash_title">Kernel Flashing</string>
|
<string name="horizon_flash_title">ضرب النواة</string>
|
||||||
<string name="horizon_logs_label">Logs:</string>
|
<string name="horizon_logs_label">السجلات:</string>
|
||||||
<string name="horizon_flash_complete">Flash Complete</string>
|
<string name="horizon_flash_complete">الفلاش اكتمل</string>
|
||||||
<!-- Flash Status Related -->
|
<!-- Flash Status Related -->
|
||||||
<string name="horizon_preparing">Preparing…</string>
|
<string name="horizon_preparing">جار التحضير</string>
|
||||||
<string name="horizon_cleaning_files">Cleaning files…</string>
|
<string name="horizon_cleaning_files">تنظيف الملفات…</string>
|
||||||
<string name="horizon_copying_files">Copying files…</string>
|
<string name="horizon_copying_files">جارٍ نسخ الملف…</string>
|
||||||
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
<string name="horizon_extracting_tool">استخراج أداة فلاش…</string>
|
||||||
<string name="horizon_patching_script">Patching flash script…</string>
|
<string name="horizon_patching_script">تعديل البرنامج النصي الفلاش…</string>
|
||||||
<string name="horizon_flashing">Flashing kernel…</string>
|
<string name="horizon_flashing">نواة رمادية…</string>
|
||||||
<string name="horizon_flash_complete_status">Flash completed</string>
|
<string name="horizon_flash_complete_status">الفلاش اكتمل</string>
|
||||||
<!-- Slot selection related strings -->
|
<!-- Slot selection related strings -->
|
||||||
<string name="select_slot_title">Select Flash Slot</string>
|
<string name="select_slot_title">حدد فتحة الفلاش</string>
|
||||||
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
<string name="select_slot_description">الرجاء تحديد الخانة المستهدفة للتشغيل المبطن</string>
|
||||||
<string name="slot_a">Slot A</string>
|
<string name="slot_a">خانة A</string>
|
||||||
<string name="slot_b">Slot B</string>
|
<string name="slot_b">الخانة B</string>
|
||||||
<string name="selected_slot">Selected slot: %1$s</string>
|
<string name="selected_slot">الفتحة المحددة: %1$s</string>
|
||||||
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
<string name="horizon_getting_original_slot">الحصول على الفتحة الأصلية</string>
|
||||||
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
<string name="horizon_setting_target_slot">تعيين الفتحة المحددة</string>
|
||||||
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
<string name="horizon_restoring_original_slot">استعادة الخانة الافتراضية</string>
|
||||||
<string name="current_slot">Current Slot:%1$s </string>
|
<string name="current_slot">خانة حالية:%1$s </string>
|
||||||
<!-- Error Messages -->
|
<!-- Error Messages -->
|
||||||
<string name="horizon_copy_failed">Copy failed</string>
|
<string name="horizon_copy_failed">فشل النسخ</string>
|
||||||
<string name="horizon_unknown_error">Unknown error</string>
|
<string name="horizon_unknown_error">خطأ غير معروف</string>
|
||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">فشل التركيب</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">إصلاح/تثبيت LKM</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">إصدار النواة:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">استخدام أداة التصحيح:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">تعيين</string>
|
||||||
<string name="app_settings">Application Settings</string>
|
<string name="app_settings">إعدادات التطبيق </string>
|
||||||
<string name="tools">Tools</string>
|
<string name="tools">ادوات</string>
|
||||||
<string name="currently_selected">Currently</string>
|
<string name="currently_selected">حالياً</string>
|
||||||
<!-- String resources used in SuperUser -->
|
<!-- String resources used in SuperUser -->
|
||||||
<string name="clear">Removals</string>
|
<string name="clear">إزالة</string>
|
||||||
<string name="apps_with_root">Applications with root privileges</string>
|
<string name="apps_with_root">التطبيقات مع امتيازات الجذر</string>
|
||||||
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
<string name="apps_with_custom_profile">التطبيقات مع الإعدادات المخصصة</string>
|
||||||
<string name="other_apps">Applications with unchanged defaults</string>
|
<string name="other_apps">التطبيقات ذات الإعدادات الافتراضية بدون تغيير</string>
|
||||||
<string name="no_apps_found">Application not found</string>
|
<string name="no_apps_found">التطبيق غير موجود</string>
|
||||||
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
<string name="selinux_enabled_toast">تم تمكين SELinux</string>
|
||||||
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
<string name="selinux_disabled_toast">تم تعطيل SELinux</string>
|
||||||
<string name="selinux_change_failed">SELinux Status change failed</string>
|
<string name="selinux_change_failed">فشل تغيير حالة SELinux</string>
|
||||||
<string name="advanced_settings">Advanced Settings</string>
|
<string name="advanced_settings">إعدادات متقدمة</string>
|
||||||
<string name="appearance_settings">Customize the toolbar</string>
|
<string name="appearance_settings">تخصيص شريط الأدوات</string>
|
||||||
<string name="back">Comeback</string>
|
<string name="back">عد مرة أخرى</string>
|
||||||
<string name="expand">Be in full swing</string>
|
<string name="expand">كن في طريقه كامل</string>
|
||||||
<string name="collapse">put away</string>
|
<string name="collapse">وضع بعيدا</string>
|
||||||
<string name="susfs_enabled">SuSFS enabled</string>
|
<string name="susfs_enabled">تم تمكين SuSFS</string>
|
||||||
<string name="susfs_disabled">SuSFS disabled</string>
|
<string name="susfs_disabled">تم تعطيل SuSFS</string>
|
||||||
<string name="background_set_success">Background set successfully</string>
|
<string name="background_set_success">تم تعيين الخلفية بنجاح</string>
|
||||||
<string name="background_removed">Removed custom backgrounds</string>
|
<string name="background_removed">إزالة خلفيات مخصصة</string>
|
||||||
<string name="root_require_for_install">Requires root privileges</string>
|
<string name="root_require_for_install">يتطلب امتيازات الجذر</string>
|
||||||
<!-- KPM display settings -->
|
<!-- KPM display settings -->
|
||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">عرض وظيفة KPM</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">عرض معلومات KPM ووظيفتها في الشريط المنزلي والأسفل (تحتاج إلى إعادة فتح التطبيق)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">حقن Eruda في WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">حقن وحدة التصحيح في WebUI X لجعل تصحيح الأخطاء أسهل. يتطلب تصحيح أخطاء الويب لتكون قيد التشغيل.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
<string name="dpi_settings">DPI setting</string>
|
<string name="dpi_settings">إعداد DPI</string>
|
||||||
<string name="app_dpi_title">Applied DPI</string>
|
<string name="app_dpi_title">تم تطبيق DPI</string>
|
||||||
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
<string name="app_dpi_summary">ضبط كثافة عرض الشاشة للتطبيق الحالي فقط</string>
|
||||||
<string name="dpi_size_small">Small </string>
|
<string name="dpi_size_small">صغير </string>
|
||||||
<string name="dpi_size_medium">Medium </string>
|
<string name="dpi_size_medium">متوسط </string>
|
||||||
<string name="dpi_size_large">Big</string>
|
<string name="dpi_size_large">كبير</string>
|
||||||
<string name="dpi_size_extra_large">oversize</string>
|
<string name="dpi_size_extra_large">حجم كبير</string>
|
||||||
<string name="dpi_size_custom">customizable</string>
|
<string name="dpi_size_custom">قابلة للتعديل</string>
|
||||||
<string name="dpi_apply_settings">Applying DPI settings</string>
|
<string name="dpi_apply_settings">تطبيق إعدادات DPI</string>
|
||||||
<string name="dpi_confirm_title">Confirm DPI change</string>
|
<string name="dpi_confirm_title">تأكيد تغيير إدارة شؤون الإعلام</string>
|
||||||
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
<string name="dpi_confirm_message">هل أنت متأكد من أنك تريد تغيير تطبيق DPI من %1$d إلى %2$d؟</string>
|
||||||
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
<string name="dpi_confirm_summary">يحتاج التطبيق إلى إعادة تشغيل لتطبيق الإعدادات الجديدة لإدارة شؤون الإعلام، ولا يؤثر على شريط حالة النظام أو التطبيقات الأخرى</string>
|
||||||
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
<string name="dpi_applied_success">تم تعيين DPI إلى %1$d، فعلي بعد إعادة تشغيل التطبيق</string>
|
||||||
<!-- Language settings related strings -->
|
<!-- Language settings related strings -->
|
||||||
<string name="language_setting">App Language</string>
|
<string name="language_setting">لغة التطبيق</string>
|
||||||
<string name="language_follow_system">Follow System</string>
|
<string name="language_follow_system">اتبع النظام</string>
|
||||||
<string name="language_changed">Language changed, restarting to apply changes</string>
|
<string name="language_changed">تم تغيير اللغة، إعادة التشغيل لتطبيق التغييرات</string>
|
||||||
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
<string name="settings_card_dim">تعديل ظلام البطاقة</string>
|
||||||
<!-- Super User Related -->
|
<!-- Super User Related -->
|
||||||
<string name="scroll_to_top">Top</string>
|
<string name="scroll_to_top">في الأعلى</string>
|
||||||
<string name="scroll_to_bottom">Bottom</string>
|
<string name="scroll_to_bottom">أسفل</string>
|
||||||
<string name="scroll_to_top_description">Scroll to top</string>
|
<string name="scroll_to_top_description">التمرير لأعلى</string>
|
||||||
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
<string name="scroll_to_bottom_description">التمرير إلى الأسفل</string>
|
||||||
<string name="authorized">authorized</string>
|
<string name="authorized">مصرح</string>
|
||||||
<string name="unauthorized">unauthorized</string>
|
<string name="unauthorized">غير مصرح</string>
|
||||||
<string name="selected">Selected</string>
|
<string name="selected">محدد</string>
|
||||||
<string name="select">option</string>
|
<string name="select">خيار</string>
|
||||||
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
<string name="profile_umount_modules_disable">تعطيل وحدة إلغاء التثبيت المخصصة</string>
|
||||||
<!-- Flash related -->
|
<!-- Flash related -->
|
||||||
<string name="error_code">error code</string>
|
<string name="error_code">رمز الخطأ</string>
|
||||||
<string name="check_log">Please check the log</string>
|
<string name="check_log">يرجى التحقق من السجل</string>
|
||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">تم تثبيت الوحدة %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">أخفق %d في تثبيت وحدة جديدة</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">فشل تحميل الوحدة</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<string name="home_unsupported_reason">KernelSU unterstützt derzeit nur GKI-Kernel</string>
|
<string name="home_unsupported_reason">KernelSU unterstützt derzeit nur GKI-Kernel</string>
|
||||||
<string name="home_kernel">Kernel</string>
|
<string name="home_kernel">Kernel</string>
|
||||||
<string name="home_susfs">SuSFS: %s</string>
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
<string name="home_susfs_version">SuSFS Version</string>
|
<string name="home_susfs_version">SuSFS version</string>
|
||||||
<string name="home_susfs_sus_su">SuS SU</string>
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Manager-Version</string>
|
<string name="home_manager_version">Manager-Version</string>
|
||||||
<string name="home_fingerprint">Fingerabdruck</string>
|
<string name="home_fingerprint">Fingerabdruck</string>
|
||||||
@@ -25,10 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">Moduldeaktivierung fehlgeschlagen: %s</string>
|
<string name="module_failed_to_disable">Moduldeaktivierung fehlgeschlagen: %s</string>
|
||||||
<string name="module_empty">Keine Modul installiert</string>
|
<string name="module_empty">Keine Modul installiert</string>
|
||||||
<string name="module">Modul</string>
|
<string name="module">Modul</string>
|
||||||
<string name="module_sort_action_first">Sort (Action first)</string>
|
<string name="module_sort_action_first">Sortiere zuerst (Aktion)</string>
|
||||||
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
<string name="module_sort_enabled_first">Sortieren (zuerst aktiviert)</string>
|
||||||
<string name="uninstall">Deinstallieren</string>
|
<string name="uninstall">Deinstallieren</string>
|
||||||
<string name="restore">Restore</string>
|
<string name="restore">Wiederherstellen</string>
|
||||||
<string name="module_install">Installieren</string>
|
<string name="module_install">Installieren</string>
|
||||||
<string name="install">Installieren</string>
|
<string name="install">Installieren</string>
|
||||||
<string name="reboot">Neustarten</string>
|
<string name="reboot">Neustarten</string>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">Erfahre, wie KernelSU installiert wird und wie Module verwendet werden</string>
|
<string name="home_click_to_learn_kernelsu">Erfahre, wie KernelSU installiert wird und wie Module verwendet werden</string>
|
||||||
<string name="home_support_title">Unterstütze uns</string>
|
<string name="home_support_title">Unterstütze uns</string>
|
||||||
<string name="home_support_content">KernelSU ist und wird immer frei und quelloffen sein. Du kannst uns jedoch deine Unterstützung zeigen, indem du eine Spende tätigst.</string>
|
<string name="home_support_content">KernelSU ist und wird immer frei und quelloffen sein. Du kannst uns jedoch deine Unterstützung zeigen, indem du eine Spende tätigst.</string>
|
||||||
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
<string name="about_source_code"><![CDATA[Den Quellcode finden Sie unter %1$s<br/>Begleiten Sie uns %2$s-Kanal]]></string>
|
||||||
<string name="profile_default">Standard</string>
|
<string name="profile_default">Standard</string>
|
||||||
<string name="profile_template">Vorlage</string>
|
<string name="profile_template">Vorlage</string>
|
||||||
<string name="profile_custom">Benutzerdefiniert</string>
|
<string name="profile_custom">Benutzerdefiniert</string>
|
||||||
@@ -70,10 +70,10 @@
|
|||||||
<string name="profile_selinux_context">SELinux-Kontext</string>
|
<string name="profile_selinux_context">SELinux-Kontext</string>
|
||||||
<string name="profile_umount_modules">Module aushängen</string>
|
<string name="profile_umount_modules">Module aushängen</string>
|
||||||
<string name="failed_to_update_app_profile">App-Profilaktualisierung für %s fehlgeschlagen</string>
|
<string name="failed_to_update_app_profile">App-Profilaktualisierung für %s fehlgeschlagen</string>
|
||||||
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
<string name="require_kernel_version" formatted="false">Die aktuelle KernelSU-Version %d ist zu alt für diese Manager-Version. Bitte auf Version %d oder höher aktualisieren!</string>
|
||||||
<string name="settings_umount_modules_default">Module standardmäßig aushängen</string>
|
<string name="settings_umount_modules_default">Module standardmäßig aushängen</string>
|
||||||
<string name="settings_umount_modules_default_summary">Globaler Standardwert für \"Module aushängen\" im App-Profil. Falls er aktiviert ist, werden alle Moduländerungen im System für alle Apps entfernt, für die kein Profil festgelegt ist.</string>
|
<string name="settings_umount_modules_default_summary">Globaler Standardwert für \"Module aushängen\" im App-Profil. Falls er aktiviert ist, werden alle Moduländerungen im System für alle Apps entfernt, für die kein Profil festgelegt ist.</string>
|
||||||
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
<string name="settings_susfs_toggle">Kprobe-Hooks deaktivieren</string>
|
||||||
<string name="profile_umount_modules_summary">Wenn du diese Option aktivierst, kann KernelSU alle von den Modulen für diese App geänderten Dateien wiederherstellen.</string>
|
<string name="profile_umount_modules_summary">Wenn du diese Option aktivierst, kann KernelSU alle von den Modulen für diese App geänderten Dateien wiederherstellen.</string>
|
||||||
<string name="profile_selinux_domain">Domäne</string>
|
<string name="profile_selinux_domain">Domäne</string>
|
||||||
<string name="profile_selinux_rules">Regeln</string>
|
<string name="profile_selinux_rules">Regeln</string>
|
||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Root-Zugriff konnte nicht gewährt werden!</string>
|
<string name="grant_root_failed">Root-Zugriff konnte nicht gewährt werden!</string>
|
||||||
<string name="action">Aktion</string>
|
<string name="action">Aktion</string>
|
||||||
<string name="open">Öffnen</string>
|
<string name="open">Öffnen</string>
|
||||||
|
<string name="close">Schließen</string>
|
||||||
<string name="enable_web_debugging">WebView-Debugging aktivieren</string>
|
<string name="enable_web_debugging">WebView-Debugging aktivieren</string>
|
||||||
<string name="enable_web_debugging_summary">Kann zum Fehlerbeheben der WebUI verwendet werden, bitte nur im Notfall aktivieren.</string>
|
<string name="enable_web_debugging_summary">Kann zum Fehlerbeheben der WebUI verwendet werden, bitte nur im Notfall aktivieren.</string>
|
||||||
<string name="direct_install">Direkte Installation (empfohlen)</string>
|
<string name="direct_install">Direkte Installation (empfohlen)</string>
|
||||||
@@ -137,234 +138,236 @@
|
|||||||
<string name="selected_lkm">Wähle LKM: %s</string>
|
<string name="selected_lkm">Wähle LKM: %s</string>
|
||||||
<string name="save_log">Protokolle Speichern</string>
|
<string name="save_log">Protokolle Speichern</string>
|
||||||
<string name="log_saved">Protokolle gespeichert</string>
|
<string name="log_saved">Protokolle gespeichert</string>
|
||||||
<string name="status_supported">Supported</string>
|
<string name="status_supported">Unterstützt:</string>
|
||||||
<string name="status_not_supported">Not Supported</string>
|
<string name="status_not_supported">Nicht unterstützt</string>
|
||||||
<string name="status_unknown">Unknown</string>
|
<string name="status_unknown">Unbekannt</string>
|
||||||
<string name="sus_su_mode">SuS SU mode:</string>
|
<string name="sus_su_mode">SuS SU-Modus:</string>
|
||||||
<!-- Module related -->
|
<!-- Module related -->
|
||||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
<string name="module_install_confirm">das Installationsmodul %1$s bestätigen ?</string>
|
||||||
<string name="unknown_module">unknown module</string>
|
<string name="unknown_module">unbekannter Modul</string>
|
||||||
<!-- Restore related -->
|
<!-- Restore related -->
|
||||||
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
<string name="restore_confirm_title">Modul-Wiederherstellung bestätigen</string>
|
||||||
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
<string name="restore_confirm_message">Diese Operation wird alle vorhandenen Module überschreiben. Fortfahren?</string>
|
||||||
<string name="confirm">Confirm</string>
|
<string name="confirm">Bestätigen</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">Abbrechen</string>
|
||||||
<!-- Backup related -->
|
<!-- Backup related -->
|
||||||
<string name="backup_success">Backup successful (tar.gz)</string>
|
<string name="backup_success">Sicherung erfolgreich (tar.gz)</string>
|
||||||
<string name="backup_failed">Backup failed: %1$s</string>
|
<string name="backup_failed">Sicherung fehlgeschlagen: %1$s</string>
|
||||||
<string name="backup_modules">backup modules</string>
|
<string name="backup_modules">sicherungsmodule</string>
|
||||||
<string name="restore_modules">restore modules</string>
|
<string name="restore_modules">wiederherstellen</string>
|
||||||
<!-- Restore related messages -->
|
<!-- Restore related messages -->
|
||||||
<string name="restore_success">Modules restored successfully, restart required</string>
|
<string name="restore_success">Module erfolgreich wiederhergestellt, Neustart erforderlich</string>
|
||||||
<string name="restore_failed">Restore failed: %1$s</string>
|
<string name="restore_failed">Wiederherstellung fehlgeschlagen: %1$s</string>
|
||||||
<string name="restart_now">Restart Now</string>
|
<string name="restart_now">Jetzt Neustarten</string>
|
||||||
<string name="unknown_error">Unknown error</string>
|
<string name="unknown_error">Ein unbekannter Fehler ist aufgetreten</string>
|
||||||
<!-- Command related -->
|
<!-- Command related -->
|
||||||
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
<string name="command_execution_failed">Befehlsausführung fehlgeschlagen: %1$s</string>
|
||||||
<!-- Allowlist related -->
|
<!-- Allowlist related -->
|
||||||
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
<string name="allowlist_backup_success">Sicherung erfolgreich erlaubt</string>
|
||||||
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
<string name="allowlist_backup_failed">Sicherung der erlaubten Liste fehlgeschlagen: %1$s</string>
|
||||||
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
<string name="allowlist_restore_confirm_title">Allowlist-Wiederherstellung bestätigen</string>
|
||||||
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
<string name="allowlist_restore_confirm_message">Dieser Vorgang wird die aktuelle Berechtigungsliste überschreiben. Fortfahren?</string>
|
||||||
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
<string name="allowlist_restore_success">Liste erfolgreich wiederhergestellt</string>
|
||||||
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
<string name="allowlist_restore_failed">Wiederherstellung der erlaubten Liste fehlgeschlagen: %1$s</string>
|
||||||
<string name="backup_allowlist">Backup Allowlist</string>
|
<string name="backup_allowlist">Sicherungsliste</string>
|
||||||
<string name="restore_allowlist">Restore Allowlist</string>
|
<string name="restore_allowlist">Allowlist wiederherstellen</string>
|
||||||
<string name="settings_custom_background">Custom App Background</string>
|
<string name="settings_custom_background">Eigener App-Hintergrund</string>
|
||||||
<string name="settings_custom_background_summary">Select an image as background</string>
|
<string name="settings_custom_background_summary">Wählen Sie ein Bild als Hintergrund</string>
|
||||||
<string name="settings_card_alpha">Navigation bar transparency</string>
|
<string name="settings_card_alpha">Transparenz der Navigationsleiste</string>
|
||||||
<string name="settings_restore_default">Restore default</string>
|
<string name="settings_restore_default">Standard wiederherstellen</string>
|
||||||
<string name="home_android_version">Android version</string>
|
<string name="home_android_version">Androidversion</string>
|
||||||
<string name="home_device_model">Device model</string>
|
<string name="home_device_model">Geräteausführung</string>
|
||||||
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
<string name="su_not_allowed">Superuser %s zu erlauben ist nicht erlaubt</string>
|
||||||
<string name="settings_disable_su">Disable su compatibility</string>
|
<string name="settings_disable_su">Su Kompatibilität deaktivieren</string>
|
||||||
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
<string name="settings_disable_su_summary">Deaktivieren Sie temporär alle Anwendungen, die root-Privilegien über den Befehl <unk> su zu erhalten (bestehende root-Prozesse werden nicht beeinflusst).</string>
|
||||||
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
<string name="using_mksu_manager">Sie verwenden den SukiSU Beta-Manager</string>
|
||||||
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
<string name="module_install_multiple_confirm">Sind Sie sicher, dass Sie die ausgewählten %d -Module installieren möchten?</string>
|
||||||
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
<string name="module_install_multiple_confirm_with_names">Möchten Sie die folgenden %1$d Module installieren? \n\n\n%2$s</string>
|
||||||
<string name="more_settings">More settings</string>
|
<string name="more_settings">Weitere Einstellungen</string>
|
||||||
<string name="selinux">SELinux</string>
|
<string name="selinux">SELinux</string>
|
||||||
<string name="selinux_enabled">Enabled</string>
|
<string name="selinux_enabled">Aktiviert</string>
|
||||||
<string name="selinux_disabled">Disabled</string>
|
<string name="selinux_disabled">Deaktiviert</string>
|
||||||
<string name="simple_mode">Simplicity mode</string>
|
<string name="simple_mode">Einfachheit Modus</string>
|
||||||
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
<string name="simple_mode_summary">Versteckt unnötige Karten beim Einschalten</string>
|
||||||
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version">Kernel-Version ausblenden</string>
|
||||||
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version_summary">Kernel-Version ausblenden</string>
|
||||||
<string name="hide_other_info">Hide other info</string>
|
<string name="hide_other_info">Andere Infos ausblenden</string>
|
||||||
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
<string name="hide_other_info_summary">Versteckt Informationen über die Anzahl der Supernutzer, Module und KPM-Module auf der Startseite</string>
|
||||||
<string name="hide_susfs_status">Hide SuSFS status</string>
|
<string name="hide_susfs_status">SuSFS-Status ausblenden</string>
|
||||||
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
<string name="hide_susfs_status_summary">SuSFS Statusinformationen auf der Startseite ausblenden</string>
|
||||||
<string name="hide_link_card">Hide Link Card Status</string>
|
<string name="hide_link_card">Link-Kartenstatus ausblenden</string>
|
||||||
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
<string name="hide_link_card_summary">Link Karteninformationen auf der Startseite ausblenden</string>
|
||||||
<string name="theme_mode">Theme</string>
|
<string name="theme_mode">Thema</string>
|
||||||
<string name="theme_follow_system">Follow system</string>
|
<string name="theme_follow_system">Systemkonform</string>
|
||||||
<string name="theme_light">Light</string>
|
<string name="theme_light">Licht</string>
|
||||||
<string name="theme_dark">Dark</string>
|
<string name="theme_dark">Dunkel</string>
|
||||||
<string name="manual_hook">Manual Hook</string>
|
<string name="manual_hook">Manueller Hook</string>
|
||||||
<string name="dynamic_color_title">Dynamic colours</string>
|
<string name="dynamic_color_title">Dynamische Farbe</string>
|
||||||
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
<string name="dynamic_color_summary">Dynamische Farben mit System-Themes</string>
|
||||||
<string name="choose_theme_color">Choose a theme colour</string>
|
<string name="choose_theme_color">Wähle eine Theme-Farbe</string>
|
||||||
<string name="color_default">Blue</string>
|
<string name="color_default">Blau</string>
|
||||||
<string name="color_green">Green</string>
|
<string name="color_green">Grün</string>
|
||||||
<string name="color_purple">Purple</string>
|
<string name="color_purple">Lila</string>
|
||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Grau</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Gelb</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Pinseloptionen</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Wählen Sie die zu flashende Datei</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
<string name="horizon_kernel_summary">Flash AnyKernel3 Kernel-Datei</string>
|
||||||
<string name="root_required">Requires root privileges</string>
|
<string name="root_required">Erfordert Root-Rechte</string>
|
||||||
<string name="copy_failed">File Copy Failure</string>
|
<string name="copy_failed">Datei-Kopierfehler</string>
|
||||||
<string name="reboot_complete_title">Scrubbing complete</string>
|
<string name="reboot_complete_title">Scrubbing abgeschlossen</string>
|
||||||
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
<string name="reboot_complete_msg">Ob sofort neu gestartet werden soll?</string>
|
||||||
<string name="yes">Yes</string>
|
<string name="yes">Ja</string>
|
||||||
<string name="no">No</string>
|
<string name="no">Nein</string>
|
||||||
<string name="failed_reboot">Reboot Failed</string>
|
<string name="failed_reboot">Neustart fehlgeschlagen</string>
|
||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empowern</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">abheben</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Sicherung</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">Keine installierten Kernelmodule</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
<string name="kpm_author">Author</string>
|
<string name="kpm_author">Autor</string>
|
||||||
<string name="kpm_uninstall">Uninstall</string>
|
<string name="kpm_uninstall">Deinstallieren</string>
|
||||||
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
<string name="kpm_uninstall_success">Erfolgreich deinstalliert</string>
|
||||||
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
<string name="kpm_uninstall_failed">Deinstallation fehlgeschlagen</string>
|
||||||
<string name="kpm_install">Install</string>
|
<string name="kpm_install">Installieren</string>
|
||||||
<string name="kpm_install_success">Load of kpm module successful</string>
|
<string name="kpm_install_success">Laden des kpm Moduls erfolgreich</string>
|
||||||
<string name="kpm_install_failed">Load of kpm module failed</string>
|
<string name="kpm_install_failed">Laden des kpm-Moduls fehlgeschlagen</string>
|
||||||
<string name="kpm_args">Parameters</string>
|
<string name="kpm_args">Parameter</string>
|
||||||
<string name="kpm_control">Execute</string>
|
<string name="kpm_control">Ausführen</string>
|
||||||
<string name="home_kpm_version">KPM Version</string>
|
<string name="home_kpm_version">KPM-Version</string>
|
||||||
<string name="close_notice">Close</string>
|
<string name="close_notice">Schließen</string>
|
||||||
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
<string name="kernel_module_notice">Die folgenden Kernel-Modulfunktionen wurden von KernelPatch entwickelt und so modifiziert, dass die Funktionen des Kernel-Moduls von SukiSU Ultra enthalten sind</string>
|
||||||
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra freut sich auf</string>
|
||||||
<string name="kpm_control_success">Success</string>
|
<string name="kpm_control_success">Erfolgreich</string>
|
||||||
<string name="kpm_control_failed">Failed</string>
|
<string name="kpm_control_failed">Fehlgeschlagen</string>
|
||||||
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra wird in Zukunft ein relativ unabhängiger Zweig der KSU sein, aber wir schätzen immer noch die offiziellen KernelSU und MKSU usw. für ihre Beiträge!</string>
|
||||||
<string name="not_supported">Unsupported</string>
|
<string name="not_supported">Nicht unterstützt</string>
|
||||||
<string name="supported">Supported</string>
|
<string name="supported">Unterstützt:</string>
|
||||||
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
<string name="home_kpm_module">"Anzahl der KPM-Module: %d "</string>
|
||||||
<string name="kpm_invalid_file">Invalid KPM file</string>
|
<string name="kpm_invalid_file">Ungültige KPM-Datei</string>
|
||||||
<string name="kernel_patched">Kernel not patched</string>
|
<string name="kernel_patched">Kernel nicht gepatcht</string>
|
||||||
<string name="kernel_not_enabled">Kernel not configured</string>
|
<string name="kernel_not_enabled">Kernel nicht konfiguriert</string>
|
||||||
<string name="custom_settings">Custom settings</string>
|
<string name="custom_settings">Eigene Einstellungen</string>
|
||||||
<string name="kpm_install_mode">KPM Install</string>
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
<string name="kpm_install_mode_load">Load</string>
|
<string name="kpm_install_mode_load">Laden</string>
|
||||||
<string name="kpm_install_mode_embed">Embed</string>
|
<string name="kpm_install_mode_embed">Einbetten</string>
|
||||||
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
<string name="kpm_install_mode_description">Bitte wählen: %1\$s Modul-Installationsmodus \n\nLaden: Das Modul \ntemporär laden: Dauerhaft in das System installieren</string>
|
||||||
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
<string name="log_failed_to_check_module_file">Fehler beim Prüfen der Moduldatei-Existenz</string>
|
||||||
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
<string name="snackbar_failed_to_check_module_file">Kann nicht überprüfen, ob die Moduldatei existiert</string>
|
||||||
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
<string name="confirm_uninstall_title">Deinstallation bestätigen.</string>
|
||||||
<string name="confirm_uninstall_confirm">Uninstall</string>
|
<string name="confirm_uninstall_confirm">Deinstallieren</string>
|
||||||
<string name="confirm_uninstall_dismiss">Cancel</string>
|
<string name="confirm_uninstall_dismiss">Abbrechen</string>
|
||||||
<string name="theme_color">Theme Color</string>
|
<string name="theme_color">Themenfarbe</string>
|
||||||
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
<string name="invalid_file_type">Falscher Dateityp! Bitte wählen Sie eine .kpm Datei.</string>
|
||||||
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
<string name="confirm_uninstall_title_with_filename">Deinstallieren</string>
|
||||||
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
<string name="confirm_uninstall_content">Folgende KPM wird deinstalliert: %s</string>
|
||||||
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
<string name="settings_susfs_toggle_summary">Deaktiviere kprobe Hooks die von KernelSU erstellt wurden und stattdessen inline Hooks verwenden, was der Nicht-GKI-Kernel-Hooking Methode ähnlich ist.</string>
|
||||||
<string name="image_editor_title">Adjust background image</string>
|
<string name="image_editor_title">Hintergrundbild anpassen</string>
|
||||||
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
<string name="image_editor_hint">Verwende zwei Finger um das Bild zu vergrößern und einen Finger um die Position anzupassen</string>
|
||||||
<string name="background_image_error">Could not load image</string>
|
<string name="background_image_error">Bild konnte nicht geladen werden</string>
|
||||||
<string name="reprovision">Reprovision</string>
|
<string name="reprovision">Rückzahlung</string>
|
||||||
<!-- Kernel Flash Progress Related -->
|
<!-- Kernel Flash Progress Related -->
|
||||||
<string name="horizon_flash_title">Kernel Flashing</string>
|
<string name="horizon_flash_title">Kernel-Flashen</string>
|
||||||
<string name="horizon_logs_label">Logs:</string>
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
<string name="horizon_flash_complete">Flash Complete</string>
|
<string name="horizon_flash_complete">Blitz abgeschlossen</string>
|
||||||
<!-- Flash Status Related -->
|
<!-- Flash Status Related -->
|
||||||
<string name="horizon_preparing">Preparing…</string>
|
<string name="horizon_preparing">Vorbereiten…</string>
|
||||||
<string name="horizon_cleaning_files">Cleaning files…</string>
|
<string name="horizon_cleaning_files">Bereinigung von Dateien…</string>
|
||||||
<string name="horizon_copying_files">Copying files…</string>
|
<string name="horizon_copying_files">Kopiere Datei…</string>
|
||||||
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
<string name="horizon_extracting_tool">Entpacken des Flash-Tools…</string>
|
||||||
<string name="horizon_patching_script">Patching flash script…</string>
|
<string name="horizon_patching_script">Patcht Flash-Skript…</string>
|
||||||
<string name="horizon_flashing">Flashing kernel…</string>
|
<string name="horizon_flashing">Flashen des Kernels…</string>
|
||||||
<string name="horizon_flash_complete_status">Flash completed</string>
|
<string name="horizon_flash_complete_status">Blitz abgeschlossen</string>
|
||||||
<!-- Slot selection related strings -->
|
<!-- Slot selection related strings -->
|
||||||
<string name="select_slot_title">Select Flash Slot</string>
|
<string name="select_slot_title">Wähle Flash Slot</string>
|
||||||
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
<string name="select_slot_description">Bitte wählen Sie den Ziel-Slot zum Blinken des Boots aus</string>
|
||||||
<string name="slot_a">Slot A</string>
|
<string name="slot_a">Slot A</string>
|
||||||
<string name="slot_b">Slot B</string>
|
<string name="slot_b">Steckplatz B</string>
|
||||||
<string name="selected_slot">Selected slot: %1$s</string>
|
<string name="selected_slot">Wähle LKM: %1$s</string>
|
||||||
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
<string name="horizon_getting_original_slot">Den ursprünglichen Slot erhalten</string>
|
||||||
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
<string name="horizon_setting_target_slot">Setze den angegebenen Slot</string>
|
||||||
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
<string name="horizon_restoring_original_slot">Standard wiederherstellen</string>
|
||||||
<string name="current_slot">Current Slot:%1$s </string>
|
<string name="current_slot">Aktueller Slot:%1$s </string>
|
||||||
<!-- Error Messages -->
|
<!-- Error Messages -->
|
||||||
<string name="horizon_copy_failed">Copy failed</string>
|
<string name="horizon_copy_failed">Kopieren fehlgeschlagen</string>
|
||||||
<string name="horizon_unknown_error">Unknown error</string>
|
<string name="horizon_unknown_error">Ein unbekannter Fehler ist aufgetreten</string>
|
||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Schreiben fehlgeschlagen</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM Reparatur/Installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Benutze das Patchwerkzeug:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Konfigurieren</string>
|
||||||
<string name="app_settings">Application Settings</string>
|
<string name="app_settings">Anwendungs-Einstellungen</string>
|
||||||
<string name="tools">Tools</string>
|
<string name="tools">Tools</string>
|
||||||
<string name="currently_selected">Currently</string>
|
<string name="currently_selected">Derzeit</string>
|
||||||
<!-- String resources used in SuperUser -->
|
<!-- String resources used in SuperUser -->
|
||||||
<string name="clear">Removals</string>
|
<string name="clear">Entfernen</string>
|
||||||
<string name="apps_with_root">Applications with root privileges</string>
|
<string name="apps_with_root">Anwendungen mit Root-Rechten</string>
|
||||||
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
<string name="apps_with_custom_profile">Anwendungen mit angepassten Konfigurationen</string>
|
||||||
<string name="other_apps">Applications with unchanged defaults</string>
|
<string name="other_apps">Anwendungen mit unveränderten Standardeinstellungen</string>
|
||||||
<string name="no_apps_found">Application not found</string>
|
<string name="no_apps_found">Anwendung nicht gefunden</string>
|
||||||
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
<string name="selinux_enabled_toast">SELinux aktiviert</string>
|
||||||
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
<string name="selinux_disabled_toast">SELinux deaktiviert</string>
|
||||||
<string name="selinux_change_failed">SELinux Status change failed</string>
|
<string name="selinux_change_failed">SELinux Statusänderung fehlgeschlagen</string>
|
||||||
<string name="advanced_settings">Advanced Settings</string>
|
<string name="advanced_settings">Erweiterte Einstellungen</string>
|
||||||
<string name="appearance_settings">Customize the toolbar</string>
|
<string name="appearance_settings">Passt die Symbolleiste an.</string>
|
||||||
<string name="back">Comeback</string>
|
<string name="back">Comeback</string>
|
||||||
<string name="expand">Be in full swing</string>
|
<string name="expand">Seien Sie in vollem Gange</string>
|
||||||
<string name="collapse">put away</string>
|
<string name="collapse">wegziehen</string>
|
||||||
<string name="susfs_enabled">SuSFS enabled</string>
|
<string name="susfs_enabled">SuSFS aktiviert</string>
|
||||||
<string name="susfs_disabled">SuSFS disabled</string>
|
<string name="susfs_disabled">SuSFS deaktiviert</string>
|
||||||
<string name="background_set_success">Background set successfully</string>
|
<string name="background_set_success">Hintergrund erfolgreich gesetzt</string>
|
||||||
<string name="background_removed">Removed custom backgrounds</string>
|
<string name="background_removed">Eigene Hintergründe entfernt</string>
|
||||||
<string name="root_require_for_install">Requires root privileges</string>
|
<string name="root_require_for_install">Erfordert Root-Rechte</string>
|
||||||
<!-- KPM display settings -->
|
<!-- KPM display settings -->
|
||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">KPM-Funktion anzeigen</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">KPM-Informationen und Funktion in der Home- und unteren Leiste anzeigen (muss die App erneut öffnen)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Eruda in WebUI X injizieren</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Fügen Sie eine Debug-Konsole in WebUI X ein, um das Debuggen zu vereinfachen. Benötigt Debugging im WebUI X.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
<string name="dpi_settings">DPI setting</string>
|
<string name="dpi_settings">DPI-Einstellung</string>
|
||||||
<string name="app_dpi_title">Applied DPI</string>
|
<string name="app_dpi_title">Angewendeter DPI</string>
|
||||||
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
<string name="app_dpi_summary">Bildschirmanzahl nur für die aktuelle Anwendung anpassen</string>
|
||||||
<string name="dpi_size_small">Small </string>
|
<string name="dpi_size_small">Klein </string>
|
||||||
<string name="dpi_size_medium">Medium </string>
|
<string name="dpi_size_medium">Mittel </string>
|
||||||
<string name="dpi_size_large">Big</string>
|
<string name="dpi_size_large">Groß</string>
|
||||||
<string name="dpi_size_extra_large">oversize</string>
|
<string name="dpi_size_extra_large">übergröße</string>
|
||||||
<string name="dpi_size_custom">customizable</string>
|
<string name="dpi_size_custom">anpassbar</string>
|
||||||
<string name="dpi_apply_settings">Applying DPI settings</string>
|
<string name="dpi_apply_settings">DPI-Einstellungen anwenden</string>
|
||||||
<string name="dpi_confirm_title">Confirm DPI change</string>
|
<string name="dpi_confirm_title">DPI-Änderung bestätigen</string>
|
||||||
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
<string name="dpi_confirm_message">Sind Sie sicher, dass Sie die Anwendung DPI von %1$d auf %2$d ändern möchten?</string>
|
||||||
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
<string name="dpi_confirm_summary">Die Anwendung muss neu gestartet werden, um die neuen DPI-Einstellungen zu übernehmen, hat keine Auswirkungen auf die System-Statusleiste oder andere Anwendungen</string>
|
||||||
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
<string name="dpi_applied_success">DPI wurde auf %1$dgesetzt, wirksam nach dem Neustart der Anwendung</string>
|
||||||
<!-- Language settings related strings -->
|
<!-- Language settings related strings -->
|
||||||
<string name="language_setting">App Language</string>
|
<string name="language_setting">App Sprache</string>
|
||||||
<string name="language_follow_system">Follow System</string>
|
<string name="language_follow_system">Folge Systemeinstellung</string>
|
||||||
<string name="language_changed">Language changed, restarting to apply changes</string>
|
<string name="language_changed">Sprache geändert, Neustart um Änderungen zu übernehmen</string>
|
||||||
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
<string name="settings_card_dim">Kartenfinsternis Anpassung</string>
|
||||||
<!-- Super User Related -->
|
<!-- Super User Related -->
|
||||||
<string name="scroll_to_top">Top</string>
|
<string name="scroll_to_top">Top</string>
|
||||||
<string name="scroll_to_bottom">Bottom</string>
|
<string name="scroll_to_bottom">Unten</string>
|
||||||
<string name="scroll_to_top_description">Scroll to top</string>
|
<string name="scroll_to_top_description">Bildlauf nach oben scrollen</string>
|
||||||
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
<string name="scroll_to_bottom_description">Scrolle zum Ende</string>
|
||||||
<string name="authorized">authorized</string>
|
<string name="authorized">Autorisiert</string>
|
||||||
<string name="unauthorized">unauthorized</string>
|
<string name="unauthorized">Unberechtigt</string>
|
||||||
<string name="selected">Selected</string>
|
<string name="selected">Ausgewählt</string>
|
||||||
<string name="select">option</string>
|
<string name="select">variieren</string>
|
||||||
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
<string name="profile_umount_modules_disable">Eigenes Deinstallationsmodul deaktivieren</string>
|
||||||
<!-- Flash related -->
|
<!-- Flash related -->
|
||||||
<string name="error_code">error code</string>
|
<string name="error_code">fehlercode</string>
|
||||||
<string name="check_log">Please check the log</string>
|
<string name="check_log">Bitte überprüfen Sie das Log</string>
|
||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Modul wird installiert %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Fehler bei der Installation eines neuen Moduls</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Modul-Download fehlgeschlagen</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<string name="home_unsupported_reason">KernelSU solo admite kernels GKI por ahora</string>
|
<string name="home_unsupported_reason">KernelSU solo admite kernels GKI por ahora</string>
|
||||||
<string name="home_kernel">Versión del kernel</string>
|
<string name="home_kernel">Versión del kernel</string>
|
||||||
<string name="home_susfs">SuSFS: %s</string>
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
<string name="home_susfs_version">SuSFS Version</string>
|
<string name="home_susfs_version">Versión SuSFS</string>
|
||||||
<string name="home_susfs_sus_su">SuS SU</string>
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Versión del gestor</string>
|
<string name="home_manager_version">Versión del gestor</string>
|
||||||
<string name="home_fingerprint">Huella del dispositivo</string>
|
<string name="home_fingerprint">Huella del dispositivo</string>
|
||||||
@@ -25,10 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">Error al desactivar el módulo: %s</string>
|
<string name="module_failed_to_disable">Error al desactivar el módulo: %s</string>
|
||||||
<string name="module_empty">Ningún módulo instalado</string>
|
<string name="module_empty">Ningún módulo instalado</string>
|
||||||
<string name="module">Módulo</string>
|
<string name="module">Módulo</string>
|
||||||
<string name="module_sort_action_first">Sort (Action first)</string>
|
<string name="module_sort_action_first">Ordenar (Acción primero)</string>
|
||||||
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
<string name="module_sort_enabled_first">Ordenar (Activado primero)</string>
|
||||||
<string name="uninstall">Desinstalar</string>
|
<string name="uninstall">Desinstalar</string>
|
||||||
<string name="restore">Restore</string>
|
<string name="restore">Restaurar</string>
|
||||||
<string name="module_install">Instalar</string>
|
<string name="module_install">Instalar</string>
|
||||||
<string name="install">Instalar</string>
|
<string name="install">Instalar</string>
|
||||||
<string name="reboot">Reiniciar</string>
|
<string name="reboot">Reiniciar</string>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">Aprende a instalar KernelSU y a utilizar módulos</string>
|
<string name="home_click_to_learn_kernelsu">Aprende a instalar KernelSU y a utilizar módulos</string>
|
||||||
<string name="home_support_title">Apóyanos</string>
|
<string name="home_support_title">Apóyanos</string>
|
||||||
<string name="home_support_content">KernelSU es, y siempre será, gratuito y de código abierto. Sin embargo, puedes demostrarnos que te importamos haciendo una donación.</string>
|
<string name="home_support_content">KernelSU es, y siempre será, gratuito y de código abierto. Sin embargo, puedes demostrarnos que te importamos haciendo una donación.</string>
|
||||||
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
<string name="about_source_code"><![CDATA[Ver el código fuente en %1$s<br/>Únete a nuestro canal %2$s]]></string>
|
||||||
<string name="profile_default">Predeterminado</string>
|
<string name="profile_default">Predeterminado</string>
|
||||||
<string name="profile_template">Plantilla</string>
|
<string name="profile_template">Plantilla</string>
|
||||||
<string name="profile_custom">Personalizado</string>
|
<string name="profile_custom">Personalizado</string>
|
||||||
@@ -70,10 +70,10 @@
|
|||||||
<string name="profile_selinux_context">Contexto SELinux</string>
|
<string name="profile_selinux_context">Contexto SELinux</string>
|
||||||
<string name="profile_umount_modules">Desmontar módulos</string>
|
<string name="profile_umount_modules">Desmontar módulos</string>
|
||||||
<string name="failed_to_update_app_profile">Error al actualizar el perfil de la aplicación para %s</string>
|
<string name="failed_to_update_app_profile">Error al actualizar el perfil de la aplicación para %s</string>
|
||||||
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
<string name="require_kernel_version" formatted="false">La versión %d actual de KernelSU es demasiado baja para que el gestor funcione correctamente. Por favor, ¡actualice a la versión %d o superior!</string>
|
||||||
<string name="settings_umount_modules_default">Desmontar módulos por defecto</string>
|
<string name="settings_umount_modules_default">Desmontar módulos por defecto</string>
|
||||||
<string name="settings_umount_modules_default_summary">El valor global predeterminado para \"Umount modules\" en App Profile. Si está activado, eliminará todas las modificaciones de módulos del sistema para las apps que no tengan un perfil establecido.</string>
|
<string name="settings_umount_modules_default_summary">El valor global predeterminado para \"Umount modules\" en App Profile. Si está activado, eliminará todas las modificaciones de módulos del sistema para las apps que no tengan un perfil establecido.</string>
|
||||||
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
<string name="settings_susfs_toggle">Desactivar kprobe hooks</string>
|
||||||
<string name="profile_umount_modules_summary">Activar esta opción permitirá a KernelSU restaurar cualquier archivo modificado por los módulos para esta aplicación.</string>
|
<string name="profile_umount_modules_summary">Activar esta opción permitirá a KernelSU restaurar cualquier archivo modificado por los módulos para esta aplicación.</string>
|
||||||
<string name="profile_selinux_domain">Dominio</string>
|
<string name="profile_selinux_domain">Dominio</string>
|
||||||
<string name="profile_selinux_rules">Reglas</string>
|
<string name="profile_selinux_rules">Reglas</string>
|
||||||
@@ -111,8 +111,9 @@
|
|||||||
<string name="settings_check_update">Comprobar actualización</string>
|
<string name="settings_check_update">Comprobar actualización</string>
|
||||||
<string name="settings_check_update_summary">Comprobación automática de actualizaciones al abrir la aplicación</string>
|
<string name="settings_check_update_summary">Comprobación automática de actualizaciones al abrir la aplicación</string>
|
||||||
<string name="grant_root_failed">¡No se ha podido conceder el acceso root!</string>
|
<string name="grant_root_failed">¡No se ha podido conceder el acceso root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Aktion</string>
|
||||||
<string name="open">Abrir</string>
|
<string name="open">Abrir</string>
|
||||||
|
<string name="close">Cancelar</string>
|
||||||
<string name="enable_web_debugging">Activar la depuración de WebView</string>
|
<string name="enable_web_debugging">Activar la depuración de WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Puede ser usado para depurar WebUI, por favor habilítalo sólo cuando sea necesario.</string>
|
<string name="enable_web_debugging_summary">Puede ser usado para depurar WebUI, por favor habilítalo sólo cuando sea necesario.</string>
|
||||||
<string name="direct_install">Instalación directa (Recomendada)</string>
|
<string name="direct_install">Instalación directa (Recomendada)</string>
|
||||||
@@ -129,240 +130,242 @@
|
|||||||
<string name="settings_uninstall_temporary_message">Desinstalar temporalmente KernelSU, restaurar al estado original tras el siguiente reinicio.</string>
|
<string name="settings_uninstall_temporary_message">Desinstalar temporalmente KernelSU, restaurar al estado original tras el siguiente reinicio.</string>
|
||||||
<string name="settings_uninstall_permanent_message">Desinstalar KernelSU (Root y todos los módulos) completa y permanentemente.</string>
|
<string name="settings_uninstall_permanent_message">Desinstalar KernelSU (Root y todos los módulos) completa y permanentemente.</string>
|
||||||
<string name="settings_restore_stock_image_message">Restaurar la imagen de fábrica stock (Si existe una copia de seguridad), por lo general se utiliza antes de OTA; si necesita desinstalar KernelSU, por favor, utilice \"Desinstalar permanentemente\".</string>
|
<string name="settings_restore_stock_image_message">Restaurar la imagen de fábrica stock (Si existe una copia de seguridad), por lo general se utiliza antes de OTA; si necesita desinstalar KernelSU, por favor, utilice \"Desinstalar permanentemente\".</string>
|
||||||
<string name="flashing">Flashing</string>
|
<string name="flashing">Intermitencia</string>
|
||||||
<string name="flash_success">Éxito de Flash</string>
|
<string name="flash_success">Éxito de Flash</string>
|
||||||
<string name="flash_failed">Flash falló</string>
|
<string name="flash_failed">Flash falló</string>
|
||||||
<string name="selected_lkm">LKM seleccionado: %s</string>
|
<string name="selected_lkm">LKM seleccionado: %s</string>
|
||||||
<string name="save_log">Guardar registros</string>
|
<string name="save_log">Guardar registros</string>
|
||||||
<string name="log_saved">Logs saved</string>
|
<string name="log_saved">Registro guardado</string>
|
||||||
<string name="status_supported">Supported</string>
|
<string name="status_supported">Apóyanos</string>
|
||||||
<string name="status_not_supported">Not Supported</string>
|
<string name="status_not_supported">No soportado</string>
|
||||||
<string name="status_unknown">Unknown</string>
|
<string name="status_unknown">Desconocido</string>
|
||||||
<string name="sus_su_mode">SuS SU mode:</string>
|
<string name="sus_su_mode">Modo SuS SU:</string>
|
||||||
<!-- Module related -->
|
<!-- Module related -->
|
||||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
<string name="module_install_confirm">¿confirmar la instalación del módulo %1$s?</string>
|
||||||
<string name="unknown_module">unknown module</string>
|
<string name="unknown_module">módulo desconocido</string>
|
||||||
<!-- Restore related -->
|
<!-- Restore related -->
|
||||||
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
<string name="restore_confirm_title">Confirmar restauración del módulo</string>
|
||||||
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
<string name="restore_confirm_message">Esta operación sobrescribirá todos los módulos existentes. ¿Continuar?</string>
|
||||||
<string name="confirm">Confirm</string>
|
<string name="confirm">Confirmar</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">Cancelar</string>
|
||||||
<!-- Backup related -->
|
<!-- Backup related -->
|
||||||
<string name="backup_success">Backup successful (tar.gz)</string>
|
<string name="backup_success">Copia de seguridad exitosa (tar.gz)</string>
|
||||||
<string name="backup_failed">Backup failed: %1$s</string>
|
<string name="backup_failed">Copia de seguridad fallida: %1$s</string>
|
||||||
<string name="backup_modules">backup modules</string>
|
<string name="backup_modules">módulos de respaldo</string>
|
||||||
<string name="restore_modules">restore modules</string>
|
<string name="restore_modules">restaurar módulos</string>
|
||||||
<!-- Restore related messages -->
|
<!-- Restore related messages -->
|
||||||
<string name="restore_success">Modules restored successfully, restart required</string>
|
<string name="restore_success">Módulos restaurados con éxito, se requiere reiniciar</string>
|
||||||
<string name="restore_failed">Restore failed: %1$s</string>
|
<string name="restore_failed">Restauración fallida: %1$s</string>
|
||||||
<string name="restart_now">Restart Now</string>
|
<string name="restart_now">Reiniciar ahora</string>
|
||||||
<string name="unknown_error">Unknown error</string>
|
<string name="unknown_error">Error desconocido</string>
|
||||||
<!-- Command related -->
|
<!-- Command related -->
|
||||||
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
<string name="command_execution_failed">Ejecución del comando fallida: %1$s</string>
|
||||||
<!-- Allowlist related -->
|
<!-- Allowlist related -->
|
||||||
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
<string name="allowlist_backup_success">Copia de seguridad correcta</string>
|
||||||
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
<string name="allowlist_backup_failed">Copia de seguridad de lista fallida: %1$s</string>
|
||||||
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
<string name="allowlist_restore_confirm_title">Confirmar restauración de lista de permisos</string>
|
||||||
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
<string name="allowlist_restore_confirm_message">Esta operación sobrescribirá la lista permitida actual. ¿Continuar?</string>
|
||||||
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
<string name="allowlist_restore_success">Lista restaurada correctamente</string>
|
||||||
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
<string name="allowlist_restore_failed">Restauración de lista de permisos falló: %1$s</string>
|
||||||
<string name="backup_allowlist">Backup Allowlist</string>
|
<string name="backup_allowlist">Copia de seguridad lista</string>
|
||||||
<string name="restore_allowlist">Restore Allowlist</string>
|
<string name="restore_allowlist">Restaurar lista de permisos</string>
|
||||||
<string name="settings_custom_background">Custom App Background</string>
|
<string name="settings_custom_background">Fondo de aplicación personalizado</string>
|
||||||
<string name="settings_custom_background_summary">Select an image as background</string>
|
<string name="settings_custom_background_summary">Seleccionar una imagen como fondo</string>
|
||||||
<string name="settings_card_alpha">Navigation bar transparency</string>
|
<string name="settings_card_alpha">Transparencia de la barra de navegación</string>
|
||||||
<string name="settings_restore_default">Restore default</string>
|
<string name="settings_restore_default">Restaurar</string>
|
||||||
<string name="home_android_version">Android version</string>
|
<string name="home_android_version">Versión de Android</string>
|
||||||
<string name="home_device_model">Device model</string>
|
<string name="home_device_model">Modelo del dispositivo</string>
|
||||||
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
<string name="su_not_allowed">No se permite conceder superusuario a %s</string>
|
||||||
<string name="settings_disable_su">Disable su compatibility</string>
|
<string name="settings_disable_su">Desactivar compatibilidad su</string>
|
||||||
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
<string name="settings_disable_su_summary">Deshabilita temporalmente cualquier aplicación para obtener privilegios de root a través del comando de \"it\" (los procesos de root existentes no se verán afectados).</string>
|
||||||
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
<string name="using_mksu_manager">Estás usando el administrador de la Beta de SukiSU</string>
|
||||||
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
<string name="module_install_multiple_confirm">¿Está seguro que desea instalar los módulos %d seleccionados?</string>
|
||||||
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
<string name="module_install_multiple_confirm_with_names">¿Seguro que quieres instalar los siguientes módulos %1$d ? \n\n%2$s</string>
|
||||||
<string name="more_settings">More settings</string>
|
<string name="more_settings">Opciones avanzadas</string>
|
||||||
<string name="selinux">SELinux</string>
|
<string name="selinux">SELinux</string>
|
||||||
<string name="selinux_enabled">Enabled</string>
|
<string name="selinux_enabled">Habilitado</string>
|
||||||
<string name="selinux_disabled">Disabled</string>
|
<string name="selinux_disabled">Desactivado</string>
|
||||||
<string name="simple_mode">Simplicity mode</string>
|
<string name="simple_mode">Modo de simplicidad</string>
|
||||||
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
<string name="simple_mode_summary">Ocultar tarjetas innecesarias al encender</string>
|
||||||
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version">Ocultar versión del núcleo</string>
|
||||||
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version_summary">Ocultar versión del núcleo</string>
|
||||||
<string name="hide_other_info">Hide other info</string>
|
<string name="hide_other_info">Ocultar otra información</string>
|
||||||
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
<string name="hide_other_info_summary">Oculta información sobre el número de superusuarios, módulos y módulos KPM en la página de inicio</string>
|
||||||
<string name="hide_susfs_status">Hide SuSFS status</string>
|
<string name="hide_susfs_status">Ocultar estado SuSFS</string>
|
||||||
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
<string name="hide_susfs_status_summary">Ocultar información de estado de SuSFS en la página de inicio</string>
|
||||||
<string name="hide_link_card">Hide Link Card Status</string>
|
<string name="hide_link_card">Ocultar el estado de la tarjeta de enlace</string>
|
||||||
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
<string name="hide_link_card_summary">Ocultar información de la tarjeta de enlace en la página de inicio</string>
|
||||||
<string name="theme_mode">Theme</string>
|
<string name="theme_mode">Temas</string>
|
||||||
<string name="theme_follow_system">Follow system</string>
|
<string name="theme_follow_system">Predeterminado del sistema</string>
|
||||||
<string name="theme_light">Light</string>
|
<string name="theme_light">Claro</string>
|
||||||
<string name="theme_dark">Dark</string>
|
<string name="theme_dark">Oscuro</string>
|
||||||
<string name="manual_hook">Manual Hook</string>
|
<string name="manual_hook">Gancho manual</string>
|
||||||
<string name="dynamic_color_title">Dynamic colours</string>
|
<string name="dynamic_color_title">Color dinámico</string>
|
||||||
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
<string name="dynamic_color_summary">Colores dinámicos usando temas del sistema</string>
|
||||||
<string name="choose_theme_color">Choose a theme colour</string>
|
<string name="choose_theme_color">Elegir un color de tema</string>
|
||||||
<string name="color_default">Blue</string>
|
<string name="color_default">Azul</string>
|
||||||
<string name="color_green">Green</string>
|
<string name="color_green">Verde</string>
|
||||||
<string name="color_purple">Purple</string>
|
<string name="color_purple">Morado</string>
|
||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Naranjo</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Rosa</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gris</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Amarillo</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Opciones de flash</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Seleccione el archivo a flashear</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
<string name="horizon_kernel_summary">Flash archivo del kernel AnyKernel3</string>
|
||||||
<string name="root_required">Requires root privileges</string>
|
<string name="root_required">Requiere privilegios de root</string>
|
||||||
<string name="copy_failed">File Copy Failure</string>
|
<string name="copy_failed">Fallo al copiar archivo</string>
|
||||||
<string name="reboot_complete_title">Scrubbing complete</string>
|
<string name="reboot_complete_title">Desguace completo</string>
|
||||||
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
<string name="reboot_complete_msg">¿Reiniciar inmediatamente?</string>
|
||||||
<string name="yes">Yes</string>
|
<string name="yes">Si</string>
|
||||||
<string name="no">No</string>
|
<string name="no">No</string>
|
||||||
<string name="failed_reboot">Reboot Failed</string>
|
<string name="failed_reboot">Reinicio fallido</string>
|
||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empoderar</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">gasto</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Copia de seguridad</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No hay módulos del núcleo instalados en este momento</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Versión</string>
|
||||||
<string name="kpm_author">Author</string>
|
<string name="kpm_author">Autor</string>
|
||||||
<string name="kpm_uninstall">Uninstall</string>
|
<string name="kpm_uninstall">Desinstalar</string>
|
||||||
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
<string name="kpm_uninstall_success">Desinstalado con éxito</string>
|
||||||
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
<string name="kpm_uninstall_failed">Error al desinstalar</string>
|
||||||
<string name="kpm_install">Install</string>
|
<string name="kpm_install">Instalar</string>
|
||||||
<string name="kpm_install_success">Load of kpm module successful</string>
|
<string name="kpm_install_success">Carga exitosa del módulo kpm</string>
|
||||||
<string name="kpm_install_failed">Load of kpm module failed</string>
|
<string name="kpm_install_failed">Error al cargar el módulo kpm</string>
|
||||||
<string name="kpm_args">Parameters</string>
|
<string name="kpm_args">Parámetros</string>
|
||||||
<string name="kpm_control">Execute</string>
|
<string name="kpm_control">Empezar</string>
|
||||||
<string name="home_kpm_version">KPM Version</string>
|
<string name="home_kpm_version">Versión de KPM</string>
|
||||||
<string name="close_notice">Close</string>
|
<string name="close_notice">Cancelar</string>
|
||||||
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
<string name="kernel_module_notice">Las siguientes funciones del módulo del núcleo fueron desarrolladas por KernelPatch y modificadas para incluir las funciones del módulo del núcleo de SukiSU Ultra</string>
|
||||||
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra espera a</string>
|
||||||
<string name="kpm_control_success">Success</string>
|
<string name="kpm_control_success">Correctamente realizado</string>
|
||||||
<string name="kpm_control_failed">Failed</string>
|
<string name="kpm_control_failed">Fallido</string>
|
||||||
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra será una rama relativamente independiente de KSU en el futuro, pero todavía apreciamos el KernelSU oficial y MKSU etc. ¡por sus contribuciones!</string>
|
||||||
<string name="not_supported">Unsupported</string>
|
<string name="not_supported">Sin soporte</string>
|
||||||
<string name="supported">Supported</string>
|
<string name="supported">Apoyado</string>
|
||||||
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
<string name="home_kpm_module">"Número de módulos KPM: %d "</string>
|
||||||
<string name="kpm_invalid_file">Invalid KPM file</string>
|
<string name="kpm_invalid_file">Archivo KPM inválido</string>
|
||||||
<string name="kernel_patched">Kernel not patched</string>
|
<string name="kernel_patched">Kernel no parcheado</string>
|
||||||
<string name="kernel_not_enabled">Kernel not configured</string>
|
<string name="kernel_not_enabled">Kernel no configurado</string>
|
||||||
<string name="custom_settings">Custom settings</string>
|
<string name="custom_settings">Ajustes personalizados</string>
|
||||||
<string name="kpm_install_mode">KPM Install</string>
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
<string name="kpm_install_mode_load">Load</string>
|
<string name="kpm_install_mode_load">Cargar</string>
|
||||||
<string name="kpm_install_mode_embed">Embed</string>
|
<string name="kpm_install_mode_embed">Insertar</string>
|
||||||
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
<string name="kpm_install_mode_description">Por favor seleccione: %1\$s Modo de instalación del Módulo \n\nCarga: Cargar temporalmente el módulo \nInsertar: Instalar permanentemente en el sistema</string>
|
||||||
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
<string name="log_failed_to_check_module_file">Error al comprobar la existencia del archivo de módulo</string>
|
||||||
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
<string name="snackbar_failed_to_check_module_file">No se puede comprobar si el archivo de módulo existe</string>
|
||||||
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
<string name="confirm_uninstall_title">Confirme las desinstalaciones</string>
|
||||||
<string name="confirm_uninstall_confirm">Uninstall</string>
|
<string name="confirm_uninstall_confirm">Desinstalar</string>
|
||||||
<string name="confirm_uninstall_dismiss">Cancel</string>
|
<string name="confirm_uninstall_dismiss">Cancelar</string>
|
||||||
<string name="theme_color">Theme Color</string>
|
<string name="theme_color">Color del tema</string>
|
||||||
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
<string name="invalid_file_type">¡Tipo de archivo incorrecto! Por favor seleccione el archivo .kpm.</string>
|
||||||
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
<string name="confirm_uninstall_title_with_filename">Desinstalar</string>
|
||||||
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
<string name="confirm_uninstall_content">El siguiente KPM será desinstalado: %s</string>
|
||||||
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
<string name="settings_susfs_toggle_summary">Deshabilita los ganchos kprobe creados por KernelSU, usando ganchos en línea en su lugar, que es similar al método de enganche del núcleo no GKI.</string>
|
||||||
<string name="image_editor_title">Adjust background image</string>
|
<string name="image_editor_title">Ajustar imagen de fondo</string>
|
||||||
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
<string name="image_editor_hint">Usa dos dedos para acercar la imagen, y un dedo para arrastrarla para ajustar la posición</string>
|
||||||
<string name="background_image_error">Could not load image</string>
|
<string name="background_image_error">Imposible cargar imagen</string>
|
||||||
<string name="reprovision">Reprovision</string>
|
<string name="reprovision">Reaprovisionamiento</string>
|
||||||
<!-- Kernel Flash Progress Related -->
|
<!-- Kernel Flash Progress Related -->
|
||||||
<string name="horizon_flash_title">Kernel Flashing</string>
|
<string name="horizon_flash_title">Parpadeo Kernel</string>
|
||||||
<string name="horizon_logs_label">Logs:</string>
|
<string name="horizon_logs_label">Registros:</string>
|
||||||
<string name="horizon_flash_complete">Flash Complete</string>
|
<string name="horizon_flash_complete">Flashear completo</string>
|
||||||
<!-- Flash Status Related -->
|
<!-- Flash Status Related -->
|
||||||
<string name="horizon_preparing">Preparing…</string>
|
<string name="horizon_preparing">Preparando…</string>
|
||||||
<string name="horizon_cleaning_files">Cleaning files…</string>
|
<string name="horizon_cleaning_files">Limpiando archivos…</string>
|
||||||
<string name="horizon_copying_files">Copying files…</string>
|
<string name="horizon_copying_files">Copiando archivos…</string>
|
||||||
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
<string name="horizon_extracting_tool">Extrayendo herramienta flash…</string>
|
||||||
<string name="horizon_patching_script">Patching flash script…</string>
|
<string name="horizon_patching_script">Parcheando script flash…</string>
|
||||||
<string name="horizon_flashing">Flashing kernel…</string>
|
<string name="horizon_flashing">Flashear kernel…</string>
|
||||||
<string name="horizon_flash_complete_status">Flash completed</string>
|
<string name="horizon_flash_complete_status">Flash completado</string>
|
||||||
<!-- Slot selection related strings -->
|
<!-- Slot selection related strings -->
|
||||||
<string name="select_slot_title">Select Flash Slot</string>
|
<string name="select_slot_title">Seleccionar Ranura Flash</string>
|
||||||
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
<string name="select_slot_description">Por favor, seleccione la ranura de destino para flashear el arranque</string>
|
||||||
<string name="slot_a">Slot A</string>
|
<string name="slot_a">Slot A</string>
|
||||||
<string name="slot_b">Slot B</string>
|
<string name="slot_b">Slot B</string>
|
||||||
<string name="selected_slot">Selected slot: %1$s</string>
|
<string name="selected_slot">Slot selectionada</string>
|
||||||
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
<string name="horizon_getting_original_slot">Obteniendo la ranura original</string>
|
||||||
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
<string name="horizon_setting_target_slot">Establecer la ranura especificada</string>
|
||||||
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
<string name="horizon_restoring_original_slot">Restaurar Ranura Predeterminada</string>
|
||||||
<string name="current_slot">Current Slot:%1$s </string>
|
<string name="current_slot">Ranura actual:%1$s </string>
|
||||||
<!-- Error Messages -->
|
<!-- Error Messages -->
|
||||||
<string name="horizon_copy_failed">Copy failed</string>
|
<string name="horizon_copy_failed">Hubo un fallo al copiar</string>
|
||||||
<string name="horizon_unknown_error">Unknown error</string>
|
<string name="horizon_unknown_error">Error desconocido</string>
|
||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash falló</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">Reparación/instalación de LKM</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Versión del kernel</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Usando la herramienta de parches:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configurar</string>
|
||||||
<string name="app_settings">Application Settings</string>
|
<string name="app_settings">Configuración de la Aplicación</string>
|
||||||
<string name="tools">Tools</string>
|
<string name="tools">Herramientas</string>
|
||||||
<string name="currently_selected">Currently</string>
|
<string name="currently_selected">Actualmente</string>
|
||||||
<!-- String resources used in SuperUser -->
|
<!-- String resources used in SuperUser -->
|
||||||
<string name="clear">Removals</string>
|
<string name="clear">Eliminaciones</string>
|
||||||
<string name="apps_with_root">Applications with root privileges</string>
|
<string name="apps_with_root">Aplicaciones con privilegios de root</string>
|
||||||
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
<string name="apps_with_custom_profile">Aplicaciones con configuraciones personalizadas</string>
|
||||||
<string name="other_apps">Applications with unchanged defaults</string>
|
<string name="other_apps">Aplicaciones con valores por defecto sin cambios</string>
|
||||||
<string name="no_apps_found">Application not found</string>
|
<string name="no_apps_found">No se ha encontrado la solicitud</string>
|
||||||
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
<string name="selinux_enabled_toast">SELinux habilitado</string>
|
||||||
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
<string name="selinux_disabled_toast">SELinux desactivado</string>
|
||||||
<string name="selinux_change_failed">SELinux Status change failed</string>
|
<string name="selinux_change_failed">Error al cambiar el estado de SELinux</string>
|
||||||
<string name="advanced_settings">Advanced Settings</string>
|
<string name="advanced_settings">Configuraciones avanzadas</string>
|
||||||
<string name="appearance_settings">Customize the toolbar</string>
|
<string name="appearance_settings">Personalizar la barra de herramientas.</string>
|
||||||
<string name="back">Comeback</string>
|
<string name="back">Retorno</string>
|
||||||
<string name="expand">Be in full swing</string>
|
<string name="expand">Estar en pleno swing</string>
|
||||||
<string name="collapse">put away</string>
|
<string name="collapse">poner</string>
|
||||||
<string name="susfs_enabled">SuSFS enabled</string>
|
<string name="susfs_enabled">SuSFS activado</string>
|
||||||
<string name="susfs_disabled">SuSFS disabled</string>
|
<string name="susfs_disabled">SuSFS desactivado</string>
|
||||||
<string name="background_set_success">Background set successfully</string>
|
<string name="background_set_success">Fondo establecido correctamente</string>
|
||||||
<string name="background_removed">Removed custom backgrounds</string>
|
<string name="background_removed">Eliminar fondo personalizado</string>
|
||||||
<string name="root_require_for_install">Requires root privileges</string>
|
<string name="root_require_for_install">Requiere privilegios de root</string>
|
||||||
<!-- KPM display settings -->
|
<!-- KPM display settings -->
|
||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Mostrar función KPM</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Mostrar información y función KPM en la barra de inicio e inferior (Necesita reabrir la aplicación)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Inyectar Eruda en WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Inyecta una consola de depuración en WebUI X para facilitar la depuración. Requiere que la depuración web esté encendida.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
<string name="dpi_settings">DPI setting</string>
|
<string name="dpi_settings">Configuración DPI</string>
|
||||||
<string name="app_dpi_title">Applied DPI</string>
|
<string name="app_dpi_title">DPI aplicado</string>
|
||||||
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
<string name="app_dpi_summary">Ajustar la densidad de pantalla para la aplicación actual</string>
|
||||||
<string name="dpi_size_small">Small </string>
|
<string name="dpi_size_small">Pequeño </string>
|
||||||
<string name="dpi_size_medium">Medium </string>
|
<string name="dpi_size_medium">Medio </string>
|
||||||
<string name="dpi_size_large">Big</string>
|
<string name="dpi_size_large">Original</string>
|
||||||
<string name="dpi_size_extra_large">oversize</string>
|
<string name="dpi_size_extra_large">sobretamaño</string>
|
||||||
<string name="dpi_size_custom">customizable</string>
|
<string name="dpi_size_custom">personalizable</string>
|
||||||
<string name="dpi_apply_settings">Applying DPI settings</string>
|
<string name="dpi_apply_settings">Aplicando ajustes de DPI</string>
|
||||||
<string name="dpi_confirm_title">Confirm DPI change</string>
|
<string name="dpi_confirm_title">Confirmar cambio DPI</string>
|
||||||
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
<string name="dpi_confirm_message">¿Estás seguro de que quieres cambiar el DPI de la aplicación de %1$d a %2$d?</string>
|
||||||
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
<string name="dpi_confirm_summary">La aplicación necesita reiniciarse para aplicar la nueva configuración DPI, no afecta a la barra de estado del sistema u otras aplicaciones</string>
|
||||||
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
<string name="dpi_applied_success">DPI ha sido establecido a %1$d, efectivo después de reiniciar la aplicación</string>
|
||||||
<!-- Language settings related strings -->
|
<!-- Language settings related strings -->
|
||||||
<string name="language_setting">App Language</string>
|
<string name="language_setting">Idioma de la aplicación</string>
|
||||||
<string name="language_follow_system">Follow System</string>
|
<string name="language_follow_system">Seguir sistema</string>
|
||||||
<string name="language_changed">Language changed, restarting to apply changes</string>
|
<string name="language_changed">Idioma cambiado, reiniciando para aplicar cambios</string>
|
||||||
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
<string name="settings_card_dim">Ajuste de oscuridad de tarjeta</string>
|
||||||
<!-- Super User Related -->
|
<!-- Super User Related -->
|
||||||
<string name="scroll_to_top">Top</string>
|
<string name="scroll_to_top">Arriba</string>
|
||||||
<string name="scroll_to_bottom">Bottom</string>
|
<string name="scroll_to_bottom">Abajo</string>
|
||||||
<string name="scroll_to_top_description">Scroll to top</string>
|
<string name="scroll_to_top_description">Ir arriba</string>
|
||||||
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
<string name="scroll_to_bottom_description">Desplazar hacia abajo</string>
|
||||||
<string name="authorized">authorized</string>
|
<string name="authorized">autorizado</string>
|
||||||
<string name="unauthorized">unauthorized</string>
|
<string name="unauthorized">Sin Autorización</string>
|
||||||
<string name="selected">Selected</string>
|
<string name="selected">Seleccionados</string>
|
||||||
<string name="select">option</string>
|
<string name="select">opción</string>
|
||||||
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
<string name="profile_umount_modules_disable">Desactivar módulo personalizado de desinstalación</string>
|
||||||
<!-- Flash related -->
|
<!-- Flash related -->
|
||||||
<string name="error_code">error code</string>
|
<string name="error_code">código de error</string>
|
||||||
<string name="check_log">Please check the log</string>
|
<string name="check_log">Por favor, compruebe el registro</string>
|
||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Módulo instalado %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d falló al instalar un nuevo módulo</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">La descarga del modelo falló</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Juurkasutaja andmine ebaõnnestus!</string>
|
<string name="grant_root_failed">Juurkasutaja andmine ebaõnnestus!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Ava</string>
|
<string name="open">Ava</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Luba WebView silumine</string>
|
<string name="enable_web_debugging">Luba WebView silumine</string>
|
||||||
<string name="enable_web_debugging_summary">Saab kasutada WebUI silumiseks, palun luba ainult vajadusel.</string>
|
<string name="enable_web_debugging_summary">Saab kasutada WebUI silumiseks, palun luba ainult vajadusel.</string>
|
||||||
<string name="direct_install">Otsene paigaldus (soovitatud)</string>
|
<string name="direct_install">Otsene paigaldus (soovitatud)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
<string name="home_unsupported_reason">KernelSU ne prend désormais en charge que les noyaux GKI</string>
|
<string name="home_unsupported_reason">KernelSU ne prend désormais en charge que les noyaux GKI</string>
|
||||||
<string name="home_kernel">Noyau</string>
|
<string name="home_kernel">Noyau</string>
|
||||||
<string name="home_susfs">SuSFS: %s</string>
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
<string name="home_susfs_version">SuSFS Version</string>
|
<string name="home_susfs_version">Version SuSFS</string>
|
||||||
<string name="home_susfs_sus_su">SuS SU</string>
|
<string name="home_susfs_sus_su">SuS Su</string>
|
||||||
<string name="home_manager_version">Version du gestionnaire</string>
|
<string name="home_manager_version">Version du gestionnaire</string>
|
||||||
<string name="home_fingerprint">Empreinte digitale</string>
|
<string name="home_fingerprint">Empreinte digitale</string>
|
||||||
<string name="home_selinux_status">Mode SELinux</string>
|
<string name="home_selinux_status">Mode SELinux</string>
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
<string name="module_sort_action_first">Trier par action</string>
|
<string name="module_sort_action_first">Trier par action</string>
|
||||||
<string name="module_sort_enabled_first">Trier par activé</string>
|
<string name="module_sort_enabled_first">Trier par activé</string>
|
||||||
<string name="uninstall">Désinstaller</string>
|
<string name="uninstall">Désinstaller</string>
|
||||||
<string name="restore">Restore</string>
|
<string name="restore">Restaure</string>
|
||||||
<string name="module_install">Installer</string>
|
<string name="module_install">Installer</string>
|
||||||
<string name="install">Installer</string>
|
<string name="install">Installer</string>
|
||||||
<string name="reboot">Redémarrer</string>
|
<string name="reboot">Redémarrer</string>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">Découvrez comment installer KernelSU et utiliser les modules</string>
|
<string name="home_click_to_learn_kernelsu">Découvrez comment installer KernelSU et utiliser les modules</string>
|
||||||
<string name="home_support_title">Soutenez-nous</string>
|
<string name="home_support_title">Soutenez-nous</string>
|
||||||
<string name="home_support_content">KernelSU est, et restera toujours, gratuit et open source. Vous pouvez cependant nous témoigner de votre soutien en nous faisant un don.</string>
|
<string name="home_support_content">KernelSU est, et restera toujours, gratuit et open source. Vous pouvez cependant nous témoigner de votre soutien en nous faisant un don.</string>
|
||||||
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
<string name="about_source_code"><![CDATA[Voir le code source à %1$s<br/>Rejoignez notre canal %2$s]]></string>
|
||||||
<string name="profile_default">Par défaut</string>
|
<string name="profile_default">Par défaut</string>
|
||||||
<string name="profile_template">Modèle</string>
|
<string name="profile_template">Modèle</string>
|
||||||
<string name="profile_custom">Personnalisé</string>
|
<string name="profile_custom">Personnalisé</string>
|
||||||
@@ -70,10 +70,10 @@
|
|||||||
<string name="profile_selinux_context">Contexte SELinux</string>
|
<string name="profile_selinux_context">Contexte SELinux</string>
|
||||||
<string name="profile_umount_modules">Démonter les modules</string>
|
<string name="profile_umount_modules">Démonter les modules</string>
|
||||||
<string name="failed_to_update_app_profile">Échec de la modification du profil d\'application de %s</string>
|
<string name="failed_to_update_app_profile">Échec de la modification du profil d\'application de %s</string>
|
||||||
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
<string name="require_kernel_version" formatted="false">La version actuelle de KernelSU (%d) est trop ancienne pour que le gestionnaire fonctionne correctement. Veuillez passer à la version %d ou à une version supérieure !</string>
|
||||||
<string name="settings_umount_modules_default">Démonter les modules par défaut</string>
|
<string name="settings_umount_modules_default">Démonter les modules par défaut</string>
|
||||||
<string name="settings_umount_modules_default_summary">Valeur globale par défaut pour l\'option \"Démonter les modules\" dans les profils d\'application. Lorsque l\'option est activée, les modifications apportées au système par les modules sont supprimées pour les applications qui n\'ont pas de profil défini.</string>
|
<string name="settings_umount_modules_default_summary">Valeur globale par défaut pour l\'option \"Démonter les modules\" dans les profils d\'application. Lorsque l\'option est activée, les modifications apportées au système par les modules sont supprimées pour les applications qui n\'ont pas de profil défini.</string>
|
||||||
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
<string name="settings_susfs_toggle">Désactiver les crochets kprobe</string>
|
||||||
<string name="profile_umount_modules_summary">L\'activation de cette option permettra à KernelSU de restaurer tous les fichiers modifiés par les modules pour cette application.</string>
|
<string name="profile_umount_modules_summary">L\'activation de cette option permettra à KernelSU de restaurer tous les fichiers modifiés par les modules pour cette application.</string>
|
||||||
<string name="profile_selinux_domain">Domaine</string>
|
<string name="profile_selinux_domain">Domaine</string>
|
||||||
<string name="profile_selinux_rules">Règles</string>
|
<string name="profile_selinux_rules">Règles</string>
|
||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Échec de l\'octroi des privilèges root !</string>
|
<string name="grant_root_failed">Échec de l\'octroi des privilèges root !</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Ouvrir</string>
|
<string name="open">Ouvrir</string>
|
||||||
|
<string name="close">Fermer</string>
|
||||||
<string name="enable_web_debugging">Activer le débogage WebView</string>
|
<string name="enable_web_debugging">Activer le débogage WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Peut être utilisé pour déboguer WebUI. Activez uniquement cette option si nécessaire.</string>
|
<string name="enable_web_debugging_summary">Peut être utilisé pour déboguer WebUI. Activez uniquement cette option si nécessaire.</string>
|
||||||
<string name="direct_install">Installation directe (recommandé)</string>
|
<string name="direct_install">Installation directe (recommandé)</string>
|
||||||
@@ -137,234 +138,236 @@
|
|||||||
<string name="selected_lkm">LKM sélectionné : %s</string>
|
<string name="selected_lkm">LKM sélectionné : %s</string>
|
||||||
<string name="save_log">Enregistrer les journaux</string>
|
<string name="save_log">Enregistrer les journaux</string>
|
||||||
<string name="log_saved">Journaux enregistrés</string>
|
<string name="log_saved">Journaux enregistrés</string>
|
||||||
<string name="status_supported">Supported</string>
|
<string name="status_supported">Supporté</string>
|
||||||
<string name="status_not_supported">Not Supported</string>
|
<string name="status_not_supported">Non supporté</string>
|
||||||
<string name="status_unknown">Unknown</string>
|
<string name="status_unknown">Inconnu</string>
|
||||||
<string name="sus_su_mode">SuS SU mode:</string>
|
<string name="sus_su_mode">Mode Sus</string>
|
||||||
<!-- Module related -->
|
<!-- Module related -->
|
||||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
<string name="module_install_confirm">confirmer l\'installation du module %1$s?</string>
|
||||||
<string name="unknown_module">unknown module</string>
|
<string name="unknown_module">module inconnu</string>
|
||||||
<!-- Restore related -->
|
<!-- Restore related -->
|
||||||
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
<string name="restore_confirm_title">Confirmer la restauration</string>
|
||||||
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
<string name="restore_confirm_message">Cette opération va écraser les modules existants. Continuer ?</string>
|
||||||
<string name="confirm">Confirm</string>
|
<string name="confirm">Confirmer</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">Annuler</string>
|
||||||
<!-- Backup related -->
|
<!-- Backup related -->
|
||||||
<string name="backup_success">Backup successful (tar.gz)</string>
|
<string name="backup_success">Sauvegarde réussie (tar.gz)</string>
|
||||||
<string name="backup_failed">Backup failed: %1$s</string>
|
<string name="backup_failed">Échec de la sauvegarde : %1$s</string>
|
||||||
<string name="backup_modules">backup modules</string>
|
<string name="backup_modules">modules de sauvegarde</string>
|
||||||
<string name="restore_modules">restore modules</string>
|
<string name="restore_modules">Restaurer les modules</string>
|
||||||
<!-- Restore related messages -->
|
<!-- Restore related messages -->
|
||||||
<string name="restore_success">Modules restored successfully, restart required</string>
|
<string name="restore_success">Succès de la sauvegarde, redémarrer</string>
|
||||||
<string name="restore_failed">Restore failed: %1$s</string>
|
<string name="restore_failed">Échec de la restauration : %1$s</string>
|
||||||
<string name="restart_now">Restart Now</string>
|
<string name="restart_now">Redémarrer</string>
|
||||||
<string name="unknown_error">Unknown error</string>
|
<string name="unknown_error">Erreur inconnue</string>
|
||||||
<!-- Command related -->
|
<!-- Command related -->
|
||||||
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
<string name="command_execution_failed">L\'exécution de la commande a échoué : %1$s</string>
|
||||||
<!-- Allowlist related -->
|
<!-- Allowlist related -->
|
||||||
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
<string name="allowlist_backup_success">Sauvegarde de la liste blanche réussie</string>
|
||||||
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
<string name="allowlist_backup_failed">La sauvegarde de la liste d\'autorisations a échoué : %1$s</string>
|
||||||
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
<string name="allowlist_restore_confirm_title">Confirmer la restauration de la liste blanche</string>
|
||||||
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
<string name="allowlist_restore_confirm_message">Cette opération écrasera la liste blanche actuelle. Continuer ?</string>
|
||||||
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
<string name="allowlist_restore_success">Liste blanche restaurée avec succès</string>
|
||||||
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
<string name="allowlist_restore_failed">La restauration de la liste d\'autorisations a échoué : %1$s</string>
|
||||||
<string name="backup_allowlist">Backup Allowlist</string>
|
<string name="backup_allowlist">Sauvegarder la liste blanche</string>
|
||||||
<string name="restore_allowlist">Restore Allowlist</string>
|
<string name="restore_allowlist">Restaurer la liste blanche</string>
|
||||||
<string name="settings_custom_background">Custom App Background</string>
|
<string name="settings_custom_background">Arrière-plan personnalisé de l\'application</string>
|
||||||
<string name="settings_custom_background_summary">Select an image as background</string>
|
<string name="settings_custom_background_summary">Image as arrière-plan</string>
|
||||||
<string name="settings_card_alpha">Navigation bar transparency</string>
|
<string name="settings_card_alpha">Transparence de la barre de navigation</string>
|
||||||
<string name="settings_restore_default">Restore default</string>
|
<string name="settings_restore_default">Restaurer par défaut</string>
|
||||||
<string name="home_android_version">Android version</string>
|
<string name="home_android_version">Version Android</string>
|
||||||
<string name="home_device_model">Device model</string>
|
<string name="home_device_model">Modèle du téléphone</string>
|
||||||
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
<string name="su_not_allowed">Donner un super-utilisateur à %s n\'est pas autorisé</string>
|
||||||
<string name="settings_disable_su">Disable su compatibility</string>
|
<string name="settings_disable_su">Désactiver la compatibilité su</string>
|
||||||
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
<string name="settings_disable_su_summary">Désactiver temporairement l\'accès des applications aux privilèges root via la commande su (les processus root existants ne seront pas affectés).</string>
|
||||||
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
<string name="using_mksu_manager">Vous utilisez le gestionnaire SukiSU Beta</string>
|
||||||
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
<string name="module_install_multiple_confirm">Êtes-vous sûr de vouloir installer les modules %d sélectionnés ?</string>
|
||||||
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
<string name="module_install_multiple_confirm_with_names">Êtes-vous sûr de vouloir installer les modules %1$d suivants ? \n\n%2$s</string>
|
||||||
<string name="more_settings">More settings</string>
|
<string name="more_settings">Autres configurations</string>
|
||||||
<string name="selinux">SELinux</string>
|
<string name="selinux">SELinux</string>
|
||||||
<string name="selinux_enabled">Enabled</string>
|
<string name="selinux_enabled">Activé</string>
|
||||||
<string name="selinux_disabled">Disabled</string>
|
<string name="selinux_disabled">Désactivé</string>
|
||||||
<string name="simple_mode">Simplicity mode</string>
|
<string name="simple_mode">Me simple</string>
|
||||||
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
<string name="simple_mode_summary">Masque les cartes inutiles lorsqu\'il est activé</string>
|
||||||
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version">Masquer la version du noyau</string>
|
||||||
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version_summary">Masquer la version du noyau</string>
|
||||||
<string name="hide_other_info">Hide other info</string>
|
<string name="hide_other_info">Masquer les autres infos</string>
|
||||||
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
<string name="hide_other_info_summary">Masque des informations sur le nombre de super utilisateurs, de modules et de modules KPM sur la page d\'accueil</string>
|
||||||
<string name="hide_susfs_status">Hide SuSFS status</string>
|
<string name="hide_susfs_status">Masquer le statut SuSFS</string>
|
||||||
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
<string name="hide_susfs_status_summary">Masquer les informations de la carte de lien sur la page d\'accueil</string>
|
||||||
<string name="hide_link_card">Hide Link Card Status</string>
|
<string name="hide_link_card">Masquer le statut du lien de la carte</string>
|
||||||
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
<string name="hide_link_card_summary">Masquer les informations de la carte de lien sur la page d\'accueil</string>
|
||||||
<string name="theme_mode">Theme</string>
|
<string name="theme_mode">Thème</string>
|
||||||
<string name="theme_follow_system">Follow system</string>
|
<string name="theme_follow_system">Suivre le système</string>
|
||||||
<string name="theme_light">Light</string>
|
<string name="theme_light">Clair</string>
|
||||||
<string name="theme_dark">Dark</string>
|
<string name="theme_dark">Sombre</string>
|
||||||
<string name="manual_hook">Manual Hook</string>
|
<string name="manual_hook">Crochet manuel</string>
|
||||||
<string name="dynamic_color_title">Dynamic colours</string>
|
<string name="dynamic_color_title">Couleur dynamique</string>
|
||||||
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
<string name="dynamic_color_summary">Couleurs dynamiques en utilisant des thèmes système</string>
|
||||||
<string name="choose_theme_color">Choose a theme colour</string>
|
<string name="choose_theme_color">Choisir une couleur de thème</string>
|
||||||
<string name="color_default">Blue</string>
|
<string name="color_default">Bleu</string>
|
||||||
<string name="color_green">Green</string>
|
<string name="color_green">Vert</string>
|
||||||
<string name="color_purple">Purple</string>
|
<string name="color_purple">Violet</string>
|
||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Rose</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gris</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Jaune</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Options du flash</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Sélectionnez le fichier à installer</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
<string name="horizon_kernel_summary">Fichier noyau AnyKernel3</string>
|
||||||
<string name="root_required">Requires root privileges</string>
|
<string name="root_required">Nécessite les privilèges root</string>
|
||||||
<string name="copy_failed">File Copy Failure</string>
|
<string name="copy_failed">Échec de la copie du fichier</string>
|
||||||
<string name="reboot_complete_title">Scrubbing complete</string>
|
<string name="reboot_complete_title">Traitement terminé</string>
|
||||||
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
<string name="reboot_complete_msg">Redémarrer immédiatement ?</string>
|
||||||
<string name="yes">Yes</string>
|
<string name="yes">Oui</string>
|
||||||
<string name="no">No</string>
|
<string name="no">Non</string>
|
||||||
<string name="failed_reboot">Reboot Failed</string>
|
<string name="failed_reboot">Échec du redémarrage</string>
|
||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">ePouvoir</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">retirer</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Sauvegarder</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">Aucun module de noyau installé pour le moment</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
<string name="kpm_author">Author</string>
|
<string name="kpm_author">Auteur</string>
|
||||||
<string name="kpm_uninstall">Uninstall</string>
|
<string name="kpm_uninstall">Désinstaller</string>
|
||||||
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
<string name="kpm_uninstall_success">Désinstallé avec succès</string>
|
||||||
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
<string name="kpm_uninstall_failed">Échec de la désinstallation : </string>
|
||||||
<string name="kpm_install">Install</string>
|
<string name="kpm_install">Installer</string>
|
||||||
<string name="kpm_install_success">Load of kpm module successful</string>
|
<string name="kpm_install_success">Chargement du module kpm réussi</string>
|
||||||
<string name="kpm_install_failed">Load of kpm module failed</string>
|
<string name="kpm_install_failed">Le chargement du module kpm a échoué</string>
|
||||||
<string name="kpm_args">Parameters</string>
|
<string name="kpm_args">Paramètres</string>
|
||||||
<string name="kpm_control">Execute</string>
|
<string name="kpm_control">Exécuter</string>
|
||||||
<string name="home_kpm_version">KPM Version</string>
|
<string name="home_kpm_version">Version de KPM</string>
|
||||||
<string name="close_notice">Close</string>
|
<string name="close_notice">Fermer</string>
|
||||||
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
<string name="kernel_module_notice">Les fonctions suivantes du module du noyau ont été développées par KernelPatch et modifiées pour inclure les fonctions du module du noyau de SukiSU Ultra</string>
|
||||||
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra attend avec impatience</string>
|
||||||
<string name="kpm_control_success">Success</string>
|
<string name="kpm_control_success">Succès</string>
|
||||||
<string name="kpm_control_failed">Failed</string>
|
<string name="kpm_control_failed">Echoué</string>
|
||||||
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra sera une branche relativement indépendante de KSU dans le futur, mais nous apprécions toujours le KernelSU officiel, MKSU etc. pour leurs contributions!</string>
|
||||||
<string name="not_supported">Unsupported</string>
|
<string name="not_supported">Non pris en charge</string>
|
||||||
<string name="supported">Supported</string>
|
<string name="supported">Pris en charge</string>
|
||||||
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
<string name="home_kpm_module">"Nombre de modules KPM : %d "</string>
|
||||||
<string name="kpm_invalid_file">Invalid KPM file</string>
|
<string name="kpm_invalid_file">Fichier KPM invalide</string>
|
||||||
<string name="kernel_patched">Kernel not patched</string>
|
<string name="kernel_patched">Noyau non corrigé</string>
|
||||||
<string name="kernel_not_enabled">Kernel not configured</string>
|
<string name="kernel_not_enabled">Noyau non configuré</string>
|
||||||
<string name="custom_settings">Custom settings</string>
|
<string name="custom_settings">Paramètres personnalisés</string>
|
||||||
<string name="kpm_install_mode">KPM Install</string>
|
<string name="kpm_install_mode">KPM Installé</string>
|
||||||
<string name="kpm_install_mode_load">Load</string>
|
<string name="kpm_install_mode_load">Charger</string>
|
||||||
<string name="kpm_install_mode_embed">Embed</string>
|
<string name="kpm_install_mode_embed">Intégrer</string>
|
||||||
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
<string name="kpm_install_mode_description">Veuillez sélectionner : %1\$s Mode d\'installation du module \n\nCharge : Chargez temporairement le module \nIntégré: Installez définitivement dans le système</string>
|
||||||
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
<string name="log_failed_to_check_module_file">Impossible de vérifier l\'existence du fichier du module</string>
|
||||||
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
<string name="snackbar_failed_to_check_module_file">Impossible de vérifier si le fichier du module existe</string>
|
||||||
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
<string name="confirm_uninstall_title">Confirmer la désinstallation.</string>
|
||||||
<string name="confirm_uninstall_confirm">Uninstall</string>
|
<string name="confirm_uninstall_confirm">Désinstaller</string>
|
||||||
<string name="confirm_uninstall_dismiss">Cancel</string>
|
<string name="confirm_uninstall_dismiss">Annuler</string>
|
||||||
<string name="theme_color">Theme Color</string>
|
<string name="theme_color">Couleur du thème</string>
|
||||||
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
<string name="invalid_file_type">Type de fichier incorrect ! Veuillez sélectionner un fichier .kpm.</string>
|
||||||
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
<string name="confirm_uninstall_title_with_filename">Désinstaller</string>
|
||||||
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
<string name="confirm_uninstall_content">Le KPM suivant sera désinstallé : %s</string>
|
||||||
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
<string name="settings_susfs_toggle_summary">Désactivez les crochets kprobe créés par KernelSU, en utilisant des crochets en ligne à la place, ce qui est similaire à la méthode de crochet du noyau non-GKI.</string>
|
||||||
<string name="image_editor_title">Adjust background image</string>
|
<string name="image_editor_title">Ajuster l\'image de fond</string>
|
||||||
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
<string name="image_editor_hint">Utilisez deux doigts pour zoomer l\'image, et un doigt pour le faire glisser pour ajuster la position</string>
|
||||||
<string name="background_image_error">Could not load image</string>
|
<string name="background_image_error">Impossible de charger l\'image</string>
|
||||||
<string name="reprovision">Reprovision</string>
|
<string name="reprovision">Remise à disposition</string>
|
||||||
<!-- Kernel Flash Progress Related -->
|
<!-- Kernel Flash Progress Related -->
|
||||||
<string name="horizon_flash_title">Kernel Flashing</string>
|
<string name="horizon_flash_title">Clignotement du noyau</string>
|
||||||
<string name="horizon_logs_label">Logs:</string>
|
<string name="horizon_logs_label">Journaux:</string>
|
||||||
<string name="horizon_flash_complete">Flash Complete</string>
|
<string name="horizon_flash_complete">Flash terminé</string>
|
||||||
<!-- Flash Status Related -->
|
<!-- Flash Status Related -->
|
||||||
<string name="horizon_preparing">Preparing…</string>
|
<string name="horizon_preparing">Préparation de…</string>
|
||||||
<string name="horizon_cleaning_files">Cleaning files…</string>
|
<string name="horizon_cleaning_files">Nettoyage des fichiers…</string>
|
||||||
<string name="horizon_copying_files">Copying files…</string>
|
<string name="horizon_copying_files">Copie des fichiers…</string>
|
||||||
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
<string name="horizon_extracting_tool">Extraction de l\'outil flash…</string>
|
||||||
<string name="horizon_patching_script">Patching flash script…</string>
|
<string name="horizon_patching_script">Mise à jour du script…</string>
|
||||||
<string name="horizon_flashing">Flashing kernel…</string>
|
<string name="horizon_flashing">Flash du noyau…</string>
|
||||||
<string name="horizon_flash_complete_status">Flash completed</string>
|
<string name="horizon_flash_complete_status">Flash complété</string>
|
||||||
<!-- Slot selection related strings -->
|
<!-- Slot selection related strings -->
|
||||||
<string name="select_slot_title">Select Flash Slot</string>
|
<string name="select_slot_title">Sélectionnez l\'emplacement de Flash</string>
|
||||||
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
<string name="select_slot_description">Veuillez sélectionner l\'emplacement cible pour le démarrage du flash</string>
|
||||||
<string name="slot_a">Slot A</string>
|
<string name="slot_a">Slot A</string>
|
||||||
<string name="slot_b">Slot B</string>
|
<string name="slot_b">Slot B</string>
|
||||||
<string name="selected_slot">Selected slot: %1$s</string>
|
<string name="selected_slot">LKM sélectionné : %1$s</string>
|
||||||
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
<string name="horizon_getting_original_slot">Obtention de l\'emplacement original</string>
|
||||||
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
<string name="horizon_setting_target_slot">Définition de l\'emplacement spécifié</string>
|
||||||
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
<string name="horizon_restoring_original_slot">Restaurer l\'emplacement par défaut</string>
|
||||||
<string name="current_slot">Current Slot:%1$s </string>
|
<string name="current_slot">Emplacement actuel</string>
|
||||||
<!-- Error Messages -->
|
<!-- Error Messages -->
|
||||||
<string name="horizon_copy_failed">Copy failed</string>
|
<string name="horizon_copy_failed">Copie échouée</string>
|
||||||
<string name="horizon_unknown_error">Unknown error</string>
|
<string name="horizon_unknown_error">Erreur inconnue</string>
|
||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Échec du flash</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">Réparation/installation LKM</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Version du noyau:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Utilisation de l\'outil de correctifs:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configurer</string>
|
||||||
<string name="app_settings">Application Settings</string>
|
<string name="app_settings">Paramètres de l\'application</string>
|
||||||
<string name="tools">Tools</string>
|
<string name="tools">Outils</string>
|
||||||
<string name="currently_selected">Currently</string>
|
<string name="currently_selected">Actuellement</string>
|
||||||
<!-- String resources used in SuperUser -->
|
<!-- String resources used in SuperUser -->
|
||||||
<string name="clear">Removals</string>
|
<string name="clear">Suppressions</string>
|
||||||
<string name="apps_with_root">Applications with root privileges</string>
|
<string name="apps_with_root">Applications avec droits root</string>
|
||||||
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
<string name="apps_with_custom_profile">Applications avec configurations personnalisées</string>
|
||||||
<string name="other_apps">Applications with unchanged defaults</string>
|
<string name="other_apps">Applications avec valeurs par défaut non modifiées</string>
|
||||||
<string name="no_apps_found">Application not found</string>
|
<string name="no_apps_found">Application introuvable</string>
|
||||||
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
<string name="selinux_enabled_toast">SELinux activé</string>
|
||||||
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
<string name="selinux_disabled_toast">SELinux désactivé</string>
|
||||||
<string name="selinux_change_failed">SELinux Status change failed</string>
|
<string name="selinux_change_failed">La modification du statut SELinux a échoué</string>
|
||||||
<string name="advanced_settings">Advanced Settings</string>
|
<string name="advanced_settings">Paramètres avancés</string>
|
||||||
<string name="appearance_settings">Customize the toolbar</string>
|
<string name="appearance_settings">Choisir les boutons à afficher</string>
|
||||||
<string name="back">Comeback</string>
|
<string name="back">Reviens</string>
|
||||||
<string name="expand">Be in full swing</string>
|
<string name="expand">Etre en plein swing</string>
|
||||||
<string name="collapse">put away</string>
|
<string name="collapse">rangé</string>
|
||||||
<string name="susfs_enabled">SuSFS enabled</string>
|
<string name="susfs_enabled">SuSFS activé</string>
|
||||||
<string name="susfs_disabled">SuSFS disabled</string>
|
<string name="susfs_disabled">SuSFS désactivé</string>
|
||||||
<string name="background_set_success">Background set successfully</string>
|
<string name="background_set_success">Fond d\'écran défini avec succès</string>
|
||||||
<string name="background_removed">Removed custom backgrounds</string>
|
<string name="background_removed">Fond d\'écran personnalisé supprimé</string>
|
||||||
<string name="root_require_for_install">Requires root privileges</string>
|
<string name="root_require_for_install">Nécessite les privilèges root</string>
|
||||||
<!-- KPM display settings -->
|
<!-- KPM display settings -->
|
||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Afficher la fonction KPM</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Afficher les informations et fonctions KPM dans la barre d\'accueil et du bas (nécessite de rouvrir l\'application)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Injecter Eruda dans WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Injectez une console de débogage dans WebUI X pour faciliter le débogage. Nécessite que le débogage soit activé.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
<string name="dpi_settings">DPI setting</string>
|
<string name="dpi_settings">Réglage du DPI</string>
|
||||||
<string name="app_dpi_title">Applied DPI</string>
|
<string name="app_dpi_title">DPI appliqué</string>
|
||||||
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
<string name="app_dpi_summary">Ajuster la densité d\'affichage de l\'écran pour l\'application actuelle uniquement</string>
|
||||||
<string name="dpi_size_small">Small </string>
|
<string name="dpi_size_small">Petit </string>
|
||||||
<string name="dpi_size_medium">Medium </string>
|
<string name="dpi_size_medium">Moyenne </string>
|
||||||
<string name="dpi_size_large">Big</string>
|
<string name="dpi_size_large">Grand</string>
|
||||||
<string name="dpi_size_extra_large">oversize</string>
|
<string name="dpi_size_extra_large">surtaille</string>
|
||||||
<string name="dpi_size_custom">customizable</string>
|
<string name="dpi_size_custom">Personnalisable</string>
|
||||||
<string name="dpi_apply_settings">Applying DPI settings</string>
|
<string name="dpi_apply_settings">Application des paramètres DPI</string>
|
||||||
<string name="dpi_confirm_title">Confirm DPI change</string>
|
<string name="dpi_confirm_title">Confirmer le changement de DPI</string>
|
||||||
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
<string name="dpi_confirm_message">Êtes-vous sûr de vouloir changer le DPI de l\'application de %1$d à %2$d?</string>
|
||||||
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
<string name="dpi_confirm_summary">L\'application doit être redémarrée pour appliquer les nouveaux paramètres de DPI, n\'affecte pas la barre d\'état du système ou d\'autres applications</string>
|
||||||
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
<string name="dpi_applied_success">Le DPI a été réglé sur %1$d, effectif après le redémarrage de l\'application</string>
|
||||||
<!-- Language settings related strings -->
|
<!-- Language settings related strings -->
|
||||||
<string name="language_setting">App Language</string>
|
<string name="language_setting">Langue de l\'application</string>
|
||||||
<string name="language_follow_system">Follow System</string>
|
<string name="language_follow_system">Suivre le paramètre système</string>
|
||||||
<string name="language_changed">Language changed, restarting to apply changes</string>
|
<string name="language_changed">Langue modifiée, redémarrage pour appliquer les modifications</string>
|
||||||
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
<string name="settings_card_dim">Ajustement de l\'obscurité de la carte</string>
|
||||||
<!-- Super User Related -->
|
<!-- Super User Related -->
|
||||||
<string name="scroll_to_top">Top</string>
|
<string name="scroll_to_top">En haut</string>
|
||||||
<string name="scroll_to_bottom">Bottom</string>
|
<string name="scroll_to_bottom">En Bas</string>
|
||||||
<string name="scroll_to_top_description">Scroll to top</string>
|
<string name="scroll_to_top_description">Aller en haut</string>
|
||||||
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
<string name="scroll_to_bottom_description">Faire défiler vers le bas</string>
|
||||||
<string name="authorized">authorized</string>
|
<string name="authorized">Autorisé</string>
|
||||||
<string name="unauthorized">unauthorized</string>
|
<string name="unauthorized">non autorisé</string>
|
||||||
<string name="selected">Selected</string>
|
<string name="selected">Sélectionné</string>
|
||||||
<string name="select">option</string>
|
<string name="select">option</string>
|
||||||
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
<string name="profile_umount_modules_disable">Désactiver le module de désinstallation personnalisé</string>
|
||||||
<!-- Flash related -->
|
<!-- Flash related -->
|
||||||
<string name="error_code">error code</string>
|
<string name="error_code">code d\'erreur</string>
|
||||||
<string name="check_log">Please check the log</string>
|
<string name="check_log">Veuillez vérifier le journal</string>
|
||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module en cours d\'installation %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d a échoué à installer un nouveau module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Le téléchargement du modèle a échoué</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">A root jog megadása sikertelen!</string>
|
<string name="grant_root_failed">A root jog megadása sikertelen!</string>
|
||||||
<string name="action">Művelet</string>
|
<string name="action">Művelet</string>
|
||||||
<string name="open">Megnyitás</string>
|
<string name="open">Megnyitás</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">WebView hibakeresés engedélyezése</string>
|
<string name="enable_web_debugging">WebView hibakeresés engedélyezése</string>
|
||||||
<string name="enable_web_debugging_summary">A WebUI hibakeresésére használható, csak szükség esetén engedélyezze.</string>
|
<string name="enable_web_debugging_summary">A WebUI hibakeresésére használható, csak szükség esetén engedélyezze.</string>
|
||||||
<string name="direct_install">Közvetlen telepítés (Ajánlott)</string>
|
<string name="direct_install">Közvetlen telepítés (Ajánlott)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -112,6 +112,7 @@
|
|||||||
<string name="install_inactive_slot">Instal ke slot nonaktif (setelah OTA)</string>
|
<string name="install_inactive_slot">Instal ke slot nonaktif (setelah OTA)</string>
|
||||||
<string name="grant_root_failed">Gagal memberikan akses root!</string>
|
<string name="grant_root_failed">Gagal memberikan akses root!</string>
|
||||||
<string name="open">Buka</string>
|
<string name="open">Buka</string>
|
||||||
|
<string name="close">Tutup</string>
|
||||||
<string name="settings_check_update">Cek terbaru</string>
|
<string name="settings_check_update">Cek terbaru</string>
|
||||||
<string name="settings_check_update_summary">Cek terbaru setiap membuka aplikasi</string>
|
<string name="settings_check_update_summary">Cek terbaru setiap membuka aplikasi</string>
|
||||||
<string name="settings_uninstall_permanent_message">Hapus permanen KernelSU (root dan modul).</string>
|
<string name="settings_uninstall_permanent_message">Hapus permanen KernelSU (root dan modul).</string>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Impossibile ottenere l\'accesso root!</string>
|
<string name="grant_root_failed">Impossibile ottenere l\'accesso root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Apri</string>
|
<string name="open">Apri</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Abilita il debug di WebView</string>
|
<string name="enable_web_debugging">Abilita il debug di WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Può essere usato per svolgere il debug di WebUI, è consigliato attivarlo solo quando necessario.</string>
|
<string name="enable_web_debugging_summary">Può essere usato per svolgere il debug di WebUI, è consigliato attivarlo solo quando necessario.</string>
|
||||||
<string name="direct_install">Installazione diretta (Raccomandata)</string>
|
<string name="direct_install">Installazione diretta (Raccomandata)</string>
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -225,7 +226,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -328,8 +328,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -367,4 +369,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">root の付与に失敗しました!</string>
|
<string name="grant_root_failed">root の付与に失敗しました!</string>
|
||||||
<string name="action">アクション</string>
|
<string name="action">アクション</string>
|
||||||
<string name="open">開く</string>
|
<string name="open">開く</string>
|
||||||
|
<string name="close">閉じる</string>
|
||||||
<string name="enable_web_debugging">WebView デバッグを有効化する</string>
|
<string name="enable_web_debugging">WebView デバッグを有効化する</string>
|
||||||
<string name="enable_web_debugging_summary">WebUI のデバッグに使用できます。必要な場合でのみ有効化してください</string>
|
<string name="enable_web_debugging_summary">WebUI のデバッグに使用できます。必要な場合でのみ有効化してください</string>
|
||||||
<string name="direct_install">直接インストール (推奨)</string>
|
<string name="direct_install">直接インストール (推奨)</string>
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<string name="color_orange">オレンジ</string>
|
<string name="color_orange">オレンジ</string>
|
||||||
<string name="color_pink">ピンク</string>
|
<string name="color_pink">ピンク</string>
|
||||||
<string name="color_gray">グレー</string>
|
<string name="color_gray">グレー</string>
|
||||||
<string name="color_ivory">アイボリー</string>
|
<string name="color_yellow">イエロー</string>
|
||||||
<string name="flash_option">ブラシの設定</string>
|
<string name="flash_option">ブラシの設定</string>
|
||||||
<string name="flash_option_tip">フラッシュするファイルを選択</string>
|
<string name="flash_option_tip">フラッシュするファイルを選択</string>
|
||||||
<string name="horizon_kernel">AnyKernel3 をインストール</string>
|
<string name="horizon_kernel">AnyKernel3 をインストール</string>
|
||||||
@@ -225,7 +226,6 @@
|
|||||||
<string name="batch_authorization">権限を付与</string>
|
<string name="batch_authorization">権限を付与</string>
|
||||||
<string name="batch_cancel_authorization">撤回する</string>
|
<string name="batch_cancel_authorization">撤回する</string>
|
||||||
<string name="backup">バックアップ</string>
|
<string name="backup">バックアップ</string>
|
||||||
<string name="color_yellow">イエロー</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">カーネルモジュールは現在インストールされていません</string>
|
<string name="kpm_empty">カーネルモジュールは現在インストールされていません</string>
|
||||||
<string name="kpm_version">バージョン</string>
|
<string name="kpm_version">バージョン</string>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<string name="flash_failed_message">フラッシュに失敗しました</string>
|
<string name="flash_failed_message">フラッシュに失敗しました</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM の修復またはインストール</string>
|
<string name="Lkm_install_methods">LKM の修復またはインストール</string>
|
||||||
<string name="GKI_install_methods">GKI または 非 GKI のインストール</string>
|
<string name="GKI_install_methods">AnyKernel3 をフラッシュ</string>
|
||||||
<string name="kernel_version_log">カーネルのバージョン: %1$s</string>
|
<string name="kernel_version_log">カーネルのバージョン: %1$s</string>
|
||||||
<string name="tool_version_log">パッチ適用ツールの使用: %1$s</string>
|
<string name="tool_version_log">パッチ適用ツールの使用: %1$s</string>
|
||||||
<string name="configuration">設定</string>
|
<string name="configuration">設定</string>
|
||||||
@@ -328,8 +328,10 @@
|
|||||||
<string name="show_kpm_info">KPM 機能を表示</string>
|
<string name="show_kpm_info">KPM 機能を表示</string>
|
||||||
<string name="show_kpm_info_summary">KPM の情報と機能をホームとボトムバーに表示します (アプリを開き直す必要があります)</string>
|
<string name="show_kpm_info_summary">KPM の情報と機能をホームとボトムバーに表示します (アプリを開き直す必要があります)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">WebUI X を使用する</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">より多くの API をサポートする WebUI の代わりに WebUI X を使用します</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">WebUI に Eruda をインジェクトする</string>
|
<string name="use_webuix_eruda">WebUI に Eruda をインジェクトする</string>
|
||||||
<string name="use_webuix_eruda_summary">デバッグを容易にするために WebUI X にデバッグコンソールを挿入します。Web デバッグが ON になっている必要があります。</string>
|
<string name="use_webuix_eruda_summary">デバッグを容易にするために WebUI X にデバッグコンソールを挿入します。Web デバッグが ON になっている必要があります。</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -367,4 +369,5 @@
|
|||||||
<string name="installing_module">モジュール設置中 %1$d/%2$d</string>
|
<string name="installing_module">モジュール設置中 %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d モジュールのインストールに失敗しました</string>
|
<string name="module_failed_count">%d モジュールのインストールに失敗しました</string>
|
||||||
<string name="module_download_error">モデルのダウンロードに失敗しました</string>
|
<string name="module_download_error">モデルのダウンロードに失敗しました</string>
|
||||||
|
<string name="kernel_flashing">カーネルをフラッシュ中</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">루트 부여 실패!</string>
|
<string name="grant_root_failed">루트 부여 실패!</string>
|
||||||
<string name="action">동작</string>
|
<string name="action">동작</string>
|
||||||
<string name="open">열기</string>
|
<string name="open">열기</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">WebView 디버깅 활성화</string>
|
<string name="enable_web_debugging">WebView 디버깅 활성화</string>
|
||||||
<string name="enable_web_debugging_summary">WebUI 디버깅에 사용 가능, 필요할 때만 활성화해주세요.</string>
|
<string name="enable_web_debugging_summary">WebUI 디버깅에 사용 가능, 필요할 때만 활성화해주세요.</string>
|
||||||
<string name="direct_install">직접 설치 (권장)</string>
|
<string name="direct_install">직접 설치 (권장)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Neizdevās piešķirt sakni!</string>
|
<string name="grant_root_failed">Neizdevās piešķirt sakni!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Atvērt</string>
|
<string name="open">Atvērt</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Iespējot WebView atkļūdošanu</string>
|
<string name="enable_web_debugging">Iespējot WebView atkļūdošanu</string>
|
||||||
<string name="enable_web_debugging_summary">Var izmantot WebUI atkļūdošanai, lūdzu, izmantot tikai tad, kad tas ir nepieciešams.</string>
|
<string name="enable_web_debugging_summary">Var izmantot WebUI atkļūdošanai, lūdzu, izmantot tikai tad, kad tas ir nepieciešams.</string>
|
||||||
<string name="direct_install">Tiešā instalēšana (Ieteicams)</string>
|
<string name="direct_install">Tiešā instalēšana (Ieteicams)</string>
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -225,7 +226,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -328,8 +328,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -367,4 +369,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Kan geen root verlenen!</string>
|
<string name="grant_root_failed">Kan geen root verlenen!</string>
|
||||||
<string name="action">Actie</string>
|
<string name="action">Actie</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Schakel WebView-foutopsporing</string>
|
<string name="enable_web_debugging">Schakel WebView-foutopsporing</string>
|
||||||
<string name="enable_web_debugging_summary">Kan worden gebruikt om WebUI te debuggen. Schakel dit alleen in als dat nodig is.</string>
|
<string name="enable_web_debugging_summary">Kan worden gebruikt om WebUI te debuggen. Schakel dit alleen in als dat nodig is.</string>
|
||||||
<string name="direct_install">Directe installatie (aanbevolen)</string>
|
<string name="direct_install">Directe installatie (aanbevolen)</string>
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -225,7 +226,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -328,8 +328,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -367,4 +369,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Nie udało się przyznać roota!</string>
|
<string name="grant_root_failed">Nie udało się przyznać roota!</string>
|
||||||
<string name="action">Akcja</string>
|
<string name="action">Akcja</string>
|
||||||
<string name="open">Otwórz</string>
|
<string name="open">Otwórz</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Włącz debugowanie WebView</string>
|
<string name="enable_web_debugging">Włącz debugowanie WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Może być użyte do debugowania WebUI. Włącz tylko w razie potrzeby.</string>
|
<string name="enable_web_debugging_summary">Może być użyte do debugowania WebUI. Włącz tylko w razie potrzeby.</string>
|
||||||
<string name="direct_install">Instalacja bezpośrednia (zalecane)</string>
|
<string name="direct_install">Instalacja bezpośrednia (zalecane)</string>
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -225,7 +226,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -328,8 +328,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -367,4 +369,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<string name="home_unsupported_reason">KernelSU suporta apenas kernels GKI agora</string>
|
<string name="home_unsupported_reason">KernelSU suporta apenas kernels GKI agora</string>
|
||||||
<string name="home_kernel">Kernel</string>
|
<string name="home_kernel">Kernel</string>
|
||||||
<string name="home_susfs">SuSFS: %s</string>
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
<string name="home_susfs_version">SuSFS Version</string>
|
<string name="home_susfs_version">Versão SuSFS</string>
|
||||||
<string name="home_susfs_sus_su">SuS SU</string>
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Versão do aplicativo</string>
|
<string name="home_manager_version">Versão do aplicativo</string>
|
||||||
<string name="home_fingerprint">Impressão digital</string>
|
<string name="home_fingerprint">Impressão digital</string>
|
||||||
@@ -25,10 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">Falha ao desativar o módulo: %s</string>
|
<string name="module_failed_to_disable">Falha ao desativar o módulo: %s</string>
|
||||||
<string name="module_empty">Nenhum módulo instalado</string>
|
<string name="module_empty">Nenhum módulo instalado</string>
|
||||||
<string name="module">Modulos</string>
|
<string name="module">Modulos</string>
|
||||||
<string name="module_sort_action_first">Sort (Action first)</string>
|
<string name="module_sort_action_first">Ordenar (exceto primeiro)</string>
|
||||||
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
<string name="module_sort_enabled_first">Ordenar (Habilitado primeiro)</string>
|
||||||
<string name="uninstall">Desinstalar</string>
|
<string name="uninstall">Desinstalar</string>
|
||||||
<string name="restore">Restore</string>
|
<string name="restore">Restaurar</string>
|
||||||
<string name="module_install">Instalar</string>
|
<string name="module_install">Instalar</string>
|
||||||
<string name="install">Instalar</string>
|
<string name="install">Instalar</string>
|
||||||
<string name="reboot">Reiniciar</string>
|
<string name="reboot">Reiniciar</string>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">Aprenda a instalar o KernelSU e usar os módulos</string>
|
<string name="home_click_to_learn_kernelsu">Aprenda a instalar o KernelSU e usar os módulos</string>
|
||||||
<string name="home_support_title">Apoie-nos</string>
|
<string name="home_support_title">Apoie-nos</string>
|
||||||
<string name="home_support_content">O KernelSU é, e sempre será, gratuito e de código aberto. No entanto, você pode nos mostrar que se importa fazendo uma doação.</string>
|
<string name="home_support_content">O KernelSU é, e sempre será, gratuito e de código aberto. No entanto, você pode nos mostrar que se importa fazendo uma doação.</string>
|
||||||
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
<string name="about_source_code"><![CDATA[Veja o código fonte no %1$s<br/>Entre em nosso canal no %2$s]]></string>
|
||||||
<string name="profile_default">Padrão</string>
|
<string name="profile_default">Padrão</string>
|
||||||
<string name="profile_template">Modelo</string>
|
<string name="profile_template">Modelo</string>
|
||||||
<string name="profile_custom">Personalizado</string>
|
<string name="profile_custom">Personalizado</string>
|
||||||
@@ -70,10 +70,10 @@
|
|||||||
<string name="profile_selinux_context">contexto SELinux</string>
|
<string name="profile_selinux_context">contexto SELinux</string>
|
||||||
<string name="profile_umount_modules">Desativar modulos</string>
|
<string name="profile_umount_modules">Desativar modulos</string>
|
||||||
<string name="failed_to_update_app_profile">Falha ao atualizar o perfil do aplicativo para %s</string>
|
<string name="failed_to_update_app_profile">Falha ao atualizar o perfil do aplicativo para %s</string>
|
||||||
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
<string name="require_kernel_version" formatted="false">A versão atual do KernelSU %d é muito baixa para o gerenciador funcionar corretamente. Atualize para a versão %d ou superior!</string>
|
||||||
<string name="settings_umount_modules_default">Módulos desativados por padrão</string>
|
<string name="settings_umount_modules_default">Módulos desativados por padrão</string>
|
||||||
<string name="settings_umount_modules_default_summary">O valor padrão global para \"Módulos Umount\" em Perfis de Aplicativos. Se ativado, removerá todas as modificações de módulo do sistema para aplicativos que não possuem um Perfil definido.</string>
|
<string name="settings_umount_modules_default_summary">O valor padrão global para \"Módulos Umount\" em Perfis de Aplicativos. Se ativado, removerá todas as modificações de módulo do sistema para aplicativos que não possuem um Perfil definido.</string>
|
||||||
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
<string name="settings_susfs_toggle">Desabilitar ganchos de \"Kprobe\"</string>
|
||||||
<string name="profile_umount_modules_summary">Ativar esta opção permitirá que o KernelSU restaure quaisquer arquivos modificados pelos módulos para este aplicativo.</string>
|
<string name="profile_umount_modules_summary">Ativar esta opção permitirá que o KernelSU restaure quaisquer arquivos modificados pelos módulos para este aplicativo.</string>
|
||||||
<string name="profile_selinux_domain">Domínio</string>
|
<string name="profile_selinux_domain">Domínio</string>
|
||||||
<string name="profile_selinux_rules">Regras</string>
|
<string name="profile_selinux_rules">Regras</string>
|
||||||
@@ -85,284 +85,287 @@
|
|||||||
<string name="force_stop_app" formatted="false">Forçar parada</string>
|
<string name="force_stop_app" formatted="false">Forçar parada</string>
|
||||||
<string name="restart_app">Reiniciar</string>
|
<string name="restart_app">Reiniciar</string>
|
||||||
<string name="failed_to_update_sepolicy">Falha ao atualizar as regras do SELinux para: %s</string>
|
<string name="failed_to_update_sepolicy">Falha ao atualizar as regras do SELinux para: %s</string>
|
||||||
<string name="module_changelog">Changelog</string>
|
<string name="module_changelog">Registro de alterações</string>
|
||||||
<string name="settings_profile_template">App Profile Template</string>
|
<string name="settings_profile_template">Modelo do Perfil do Aplicativo</string>
|
||||||
<string name="settings_profile_template_summary">Manage local and online template of App Profile</string>
|
<string name="settings_profile_template_summary">Gerenciar modelo local e online do perfil do aplicativo</string>
|
||||||
<string name="app_profile_template_create">Create template</string>
|
<string name="app_profile_template_create">Criar modelo</string>
|
||||||
<string name="app_profile_template_edit">Edit template</string>
|
<string name="app_profile_template_edit">Editar modelo</string>
|
||||||
<string name="app_profile_template_id">ID</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="app_profile_template_id_invalid">Invalid template ID</string>
|
<string name="app_profile_template_id_invalid">ID de modelo incorreta</string>
|
||||||
<string name="app_profile_template_name">Name</string>
|
<string name="app_profile_template_name">Nome</string>
|
||||||
<string name="app_profile_template_description">Description</string>
|
<string name="app_profile_template_description">Descrição</string>
|
||||||
<string name="app_profile_template_save">Save</string>
|
<string name="app_profile_template_save">Salvar</string>
|
||||||
<string name="app_profile_template_delete">Delete</string>
|
<string name="app_profile_template_delete">Apagar</string>
|
||||||
<string name="app_profile_template_view">View template</string>
|
<string name="app_profile_template_view">Ver template</string>
|
||||||
<string name="app_profile_template_readonly">Read only</string>
|
<string name="app_profile_template_readonly">Somente leitura</string>
|
||||||
<string name="app_profile_template_id_exist">Template ID already exists!</string>
|
<string name="app_profile_template_id_exist">O ID do modelo já existe!</string>
|
||||||
<string name="app_profile_import_export">Import/Export</string>
|
<string name="app_profile_import_export">Importar/Exportar</string>
|
||||||
<string name="app_profile_import_from_clipboard">Import from clipboard</string>
|
<string name="app_profile_import_from_clipboard">Importar da área de transferência</string>
|
||||||
<string name="app_profile_export_to_clipboard">Export to clipboard</string>
|
<string name="app_profile_export_to_clipboard">Exportar para área de transferência</string>
|
||||||
<string name="app_profile_template_export_empty">Cannot find local template to export!</string>
|
<string name="app_profile_template_export_empty">Não foi possível encontrar modelo local para exportar!</string>
|
||||||
<string name="app_profile_template_import_success">Imported successfully</string>
|
<string name="app_profile_template_import_success">Importado com sucesso</string>
|
||||||
<string name="app_profile_template_sync">Sync online templates</string>
|
<string name="app_profile_template_sync">Sincronizar modelos on-line</string>
|
||||||
<string name="app_profile_template_save_failed">Failed to save template</string>
|
<string name="app_profile_template_save_failed">Falha ao salvar o modelo</string>
|
||||||
<string name="app_profile_template_import_empty">Clipboard is empty!</string>
|
<string name="app_profile_template_import_empty">A área de transferência está vazia!</string>
|
||||||
<string name="module_changelog_failed">Fetch changelog failed: %s</string>
|
<string name="module_changelog_failed">Falha ao buscar o registro de alterações: %s</string>
|
||||||
<string name="settings_check_update">Check update</string>
|
<string name="settings_check_update">Verificar atualização</string>
|
||||||
<string name="settings_check_update_summary">Automatically check for updates when opening the app</string>
|
<string name="settings_check_update_summary">Verifique automaticamente se há atualizações ao abrir o app</string>
|
||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Falha ao conceder acesso root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Ações</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Abrir</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="close">Fechar</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging">Ativar depuração do WebView</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="enable_web_debugging_summary">Pode ser usado para depurar o WebUI. Por favor, ative somente quando necessário.</string>
|
||||||
<string name="select_file">Select a image that needs to be patched</string>
|
<string name="direct_install">Instalação direta (recomendada)</string>
|
||||||
<string name="install_inactive_slot">Install to inactive slot (After OTA)</string>
|
<string name="select_file">Selecione uma imagem que precisa ser corrigida</string>
|
||||||
<string name="install_inactive_slot_warning">Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue?</string>
|
<string name="install_inactive_slot">Instalar no slot inativo (após o OTA)</string>
|
||||||
<string name="install_next">Next</string>
|
<string name="install_inactive_slot_warning">Seu dispositivo será **FORÇADO** para ligar no slot inativo atual após uma reinicialização!\nUse esta opção apenas depois que OTA for finalizado.\nContinuar?</string>
|
||||||
<string name="select_file_tip">%1$s partition image is recommended</string>
|
<string name="install_next">Avançar</string>
|
||||||
<string name="select_kmi">Select KMI</string>
|
<string name="select_file_tip">A imagem da partição %1$s é recomendada</string>
|
||||||
<string name="settings_uninstall">Uninstall</string>
|
<string name="select_kmi">Selecionar KMI</string>
|
||||||
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
<string name="settings_uninstall">Desinstalar</string>
|
||||||
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
<string name="settings_uninstall_temporary">Desinstalar temporariamente</string>
|
||||||
<string name="settings_restore_stock_image">Restore stock image</string>
|
<string name="settings_uninstall_permanent">Desinstalar permanentemente</string>
|
||||||
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
<string name="settings_restore_stock_image">Restaurar imagem de fábrica</string>
|
||||||
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
<string name="settings_uninstall_temporary_message">Desinstale temporariamente o KernelSU e restaure ao estado original após a próxima reinicialização</string>
|
||||||
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
<string name="settings_uninstall_permanent_message">Desinstale o KernelSU (root e todos os módulos) completamente e permanentemente</string>
|
||||||
<string name="flashing">Flashing</string>
|
<string name="settings_restore_stock_image_message">Restaure a imagem de fábrica (se existir um backup), geralmente usada antes do OTA. Se você precisar desinstalar o KernelSU, use \"Desinstalar permanentemente\".</string>
|
||||||
<string name="flash_success">Flash success</string>
|
<string name="flashing">Flasheando</string>
|
||||||
<string name="flash_failed">Flash failed</string>
|
<string name="flash_success">Flash bem-sucedido</string>
|
||||||
<string name="selected_lkm">Selected LKM: %s</string>
|
<string name="flash_failed">Flash falhou</string>
|
||||||
|
<string name="selected_lkm">LKM selecionado: %s</string>
|
||||||
<string name="save_log">Salvar Registros</string>
|
<string name="save_log">Salvar Registros</string>
|
||||||
<string name="log_saved">Logs saved</string>
|
<string name="log_saved">Registros salvos</string>
|
||||||
<string name="status_supported">Supported</string>
|
<string name="status_supported">Apoie-nos</string>
|
||||||
<string name="status_not_supported">Not Supported</string>
|
<string name="status_not_supported">Não Suportado</string>
|
||||||
<string name="status_unknown">Unknown</string>
|
<string name="status_unknown">Desconhecido</string>
|
||||||
<string name="sus_su_mode">SuS SU mode:</string>
|
<string name="sus_su_mode">Modo SU SuSU:</string>
|
||||||
<!-- Module related -->
|
<!-- Module related -->
|
||||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
<string name="module_install_confirm">¿confirmar la instalación del módulo %1$s?</string>
|
||||||
<string name="unknown_module">unknown module</string>
|
<string name="unknown_module">módulo desconocido</string>
|
||||||
<!-- Restore related -->
|
<!-- Restore related -->
|
||||||
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
<string name="restore_confirm_title">Confirmar Restauração de Módulo</string>
|
||||||
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
<string name="restore_confirm_message">Esta operação irá sobrescrever todos os módulos existentes. Continuar?</string>
|
||||||
<string name="confirm">Confirm</string>
|
<string name="confirm">Confirmação</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">Cancelar</string>
|
||||||
<!-- Backup related -->
|
<!-- Backup related -->
|
||||||
<string name="backup_success">Backup successful (tar.gz)</string>
|
<string name="backup_success">Backup bem sucedido (tar.gz)</string>
|
||||||
<string name="backup_failed">Backup failed: %1$s</string>
|
<string name="backup_failed">Backup falhou: %1$s</string>
|
||||||
<string name="backup_modules">backup modules</string>
|
<string name="backup_modules">módulos de backup</string>
|
||||||
<string name="restore_modules">restore modules</string>
|
<string name="restore_modules">restaurar módulos</string>
|
||||||
<!-- Restore related messages -->
|
<!-- Restore related messages -->
|
||||||
<string name="restore_success">Modules restored successfully, restart required</string>
|
<string name="restore_success">Módulos restaurados com sucesso, reinicialização necessária</string>
|
||||||
<string name="restore_failed">Restore failed: %1$s</string>
|
<string name="restore_failed">Falha na restauração: %1$s</string>
|
||||||
<string name="restart_now">Restart Now</string>
|
<string name="restart_now">Reiniciar agora</string>
|
||||||
<string name="unknown_error">Unknown error</string>
|
<string name="unknown_error">Erro desconhecido</string>
|
||||||
<!-- Command related -->
|
<!-- Command related -->
|
||||||
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
<string name="command_execution_failed">A execução do comando falhou: %1$s</string>
|
||||||
<!-- Allowlist related -->
|
<!-- Allowlist related -->
|
||||||
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
<string name="allowlist_backup_success">Backup concluído</string>
|
||||||
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
<string name="allowlist_backup_failed">Falha no backup permitido: %1$s</string>
|
||||||
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
<string name="allowlist_restore_confirm_title">Confirmar Restauração de Lista</string>
|
||||||
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
<string name="allowlist_restore_confirm_message">Esta operação irá sobrescrever a lista de permissão atual. Continuar?</string>
|
||||||
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
<string name="allowlist_restore_success">Allowlist restaurada com sucesso</string>
|
||||||
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
<string name="allowlist_restore_failed">Falha na restauração do Allowlist: %1$s</string>
|
||||||
<string name="backup_allowlist">Backup Allowlist</string>
|
<string name="backup_allowlist">Backup Permitido</string>
|
||||||
<string name="restore_allowlist">Restore Allowlist</string>
|
<string name="restore_allowlist">Restaurar Allowlist</string>
|
||||||
<string name="settings_custom_background">Custom App Background</string>
|
<string name="settings_custom_background">Fundo personalizado do App</string>
|
||||||
<string name="settings_custom_background_summary">Select an image as background</string>
|
<string name="settings_custom_background_summary">Selecione uma imagem como plano de fundo</string>
|
||||||
<string name="settings_card_alpha">Navigation bar transparency</string>
|
<string name="settings_card_alpha">Transparência da barra de navegação</string>
|
||||||
<string name="settings_restore_default">Restore default</string>
|
<string name="settings_restore_default">Restaurar padrões</string>
|
||||||
<string name="home_android_version">Android version</string>
|
<string name="home_android_version">Android Version: </string>
|
||||||
<string name="home_device_model">Device model</string>
|
<string name="home_device_model">Modelo do aparelho</string>
|
||||||
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
<string name="su_not_allowed">Conceder superusuário à %s não é permitido</string>
|
||||||
<string name="settings_disable_su">Disable su compatibility</string>
|
<string name="settings_disable_su">Desativar compatibilidade com su</string>
|
||||||
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
<string name="settings_disable_su_summary">Temporariamente desativar qualquer aplicativo de obter privilégios de superusuário através do comando Wait su (os processos raiz existentes não serão afetados).</string>
|
||||||
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
<string name="using_mksu_manager">Você está usando o gerenciador do SukiSU Beta</string>
|
||||||
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
<string name="module_install_multiple_confirm">Você tem certeza que deseja instalar os módulos %d selecionados?</string>
|
||||||
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
<string name="module_install_multiple_confirm_with_names">Tem certeza que deseja instalar os seguintes módulos %1$d ? \n\n%2$s</string>
|
||||||
<string name="more_settings">More settings</string>
|
<string name="more_settings">More settings</string>
|
||||||
<string name="selinux">SELinux</string>
|
<string name="selinux">SELinux</string>
|
||||||
<string name="selinux_enabled">Enabled</string>
|
<string name="selinux_enabled">Ativado</string>
|
||||||
<string name="selinux_disabled">Disabled</string>
|
<string name="selinux_disabled">Desabilitado</string>
|
||||||
<string name="simple_mode">Simplicity mode</string>
|
<string name="simple_mode">Modo de simplicidade</string>
|
||||||
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
<string name="simple_mode_summary">Oculta cartas desnecessárias quando ativadas</string>
|
||||||
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version">Ocultar versão kernel</string>
|
||||||
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version_summary">Ocultar versão kernel</string>
|
||||||
<string name="hide_other_info">Hide other info</string>
|
<string name="hide_other_info">Ocultar outras informações</string>
|
||||||
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
<string name="hide_other_info_summary">Oculta informações sobre o número de super usuários, módulos e módulos do KPM na página inicial</string>
|
||||||
<string name="hide_susfs_status">Hide SuSFS status</string>
|
<string name="hide_susfs_status">Ocultar status SuSFS</string>
|
||||||
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
<string name="hide_susfs_status_summary">Ocultar informações de status SuSFS na página inicial</string>
|
||||||
<string name="hide_link_card">Hide Link Card Status</string>
|
<string name="hide_link_card">Ocultar status do link</string>
|
||||||
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
<string name="hide_link_card_summary">Ocultar informações do cartão do link na página inicial</string>
|
||||||
<string name="theme_mode">Theme</string>
|
<string name="theme_mode">Tema</string>
|
||||||
<string name="theme_follow_system">Follow system</string>
|
<string name="theme_follow_system">Seguir o sistema</string>
|
||||||
<string name="theme_light">Light</string>
|
<string name="theme_light">Claro</string>
|
||||||
<string name="theme_dark">Dark</string>
|
<string name="theme_dark">Escuro</string>
|
||||||
<string name="manual_hook">Manual Hook</string>
|
<string name="manual_hook">Hook manual</string>
|
||||||
<string name="dynamic_color_title">Dynamic colours</string>
|
<string name="dynamic_color_title">Cor dinâmica</string>
|
||||||
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
<string name="dynamic_color_summary">Cores dinâmicas usando temas de sistema</string>
|
||||||
<string name="choose_theme_color">Choose a theme colour</string>
|
<string name="choose_theme_color">Escolha uma cor temática</string>
|
||||||
<string name="color_default">Blue</string>
|
<string name="color_default">Blue</string>
|
||||||
<string name="color_green">Green</string>
|
<string name="color_green">Verde</string>
|
||||||
<string name="color_purple">Purple</string>
|
<string name="color_purple">Violeta</string>
|
||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Laranja</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Rosa</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Cinza</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Amarelo</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Opções do pincel</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Selecione o arquivo a ser instalado</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
<string name="horizon_kernel_summary">Instalar o arquivo kernel AnyKernel3</string>
|
||||||
<string name="root_required">Requires root privileges</string>
|
<string name="root_required">Requer privilégios de superusuário</string>
|
||||||
<string name="copy_failed">File Copy Failure</string>
|
<string name="copy_failed">Falha ao copiar arquivo</string>
|
||||||
<string name="reboot_complete_title">Scrubbing complete</string>
|
<string name="reboot_complete_title">Esboço completo</string>
|
||||||
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
<string name="reboot_complete_msg">Reiniciar imediatamente?</string>
|
||||||
<string name="yes">Yes</string>
|
<string name="yes">Sim</string>
|
||||||
<string name="no">No</string>
|
<string name="no">Não</string>
|
||||||
<string name="failed_reboot">Reboot Failed</string>
|
<string name="failed_reboot">Reinicialização falhou</string>
|
||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empoderar</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">retirar</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">Não há módulos do kernel instalados neste momento</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Versão</string>
|
||||||
<string name="kpm_author">Author</string>
|
<string name="kpm_author">Autor</string>
|
||||||
<string name="kpm_uninstall">Uninstall</string>
|
<string name="kpm_uninstall">Desinstalar</string>
|
||||||
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
<string name="kpm_uninstall_success">Desinstalado com sucesso</string>
|
||||||
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
<string name="kpm_uninstall_failed">Falha ao desinstalar</string>
|
||||||
<string name="kpm_install">Install</string>
|
<string name="kpm_install">Instalar</string>
|
||||||
<string name="kpm_install_success">Load of kpm module successful</string>
|
<string name="kpm_install_success">Carregamento do módulo kpm com sucesso</string>
|
||||||
<string name="kpm_install_failed">Load of kpm module failed</string>
|
<string name="kpm_install_failed">Falha ao carregar o módulo kpm</string>
|
||||||
<string name="kpm_args">Parameters</string>
|
<string name="kpm_args">Parâmetros</string>
|
||||||
<string name="kpm_control">Execute</string>
|
<string name="kpm_control">Executar</string>
|
||||||
<string name="home_kpm_version">KPM Version</string>
|
<string name="home_kpm_version">Versão do KPM</string>
|
||||||
<string name="close_notice">Close</string>
|
<string name="close_notice">Fechar</string>
|
||||||
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
<string name="kernel_module_notice">As seguintes funções do módulo de kernel foram desenvolvidas pelo KernelPatch e modificadas para incluir as funções do módulo de kernel do SukiSU Ultra</string>
|
||||||
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra aguarda ansiosamente</string>
|
||||||
<string name="kpm_control_success">Success</string>
|
<string name="kpm_control_success">Sucesso</string>
|
||||||
<string name="kpm_control_failed">Failed</string>
|
<string name="kpm_control_failed">Falhou</string>
|
||||||
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra será uma ramificação relativamente independente da KSU no futuro, mas ainda apreciamos o KernelSU e o MKSU, etc. para suas contribuições!</string>
|
||||||
<string name="not_supported">Unsupported</string>
|
<string name="not_supported">Sem suporte</string>
|
||||||
<string name="supported">Supported</string>
|
<string name="supported">Apoie-nos</string>
|
||||||
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
<string name="home_kpm_module">"Número de módulos KPM: %d "</string>
|
||||||
<string name="kpm_invalid_file">Invalid KPM file</string>
|
<string name="kpm_invalid_file">Arquivo KPM inválido</string>
|
||||||
<string name="kernel_patched">Kernel not patched</string>
|
<string name="kernel_patched">Kernel não corrigido</string>
|
||||||
<string name="kernel_not_enabled">Kernel not configured</string>
|
<string name="kernel_not_enabled">Kernel não configurado</string>
|
||||||
<string name="custom_settings">Custom settings</string>
|
<string name="custom_settings">Configurações personalizadas</string>
|
||||||
<string name="kpm_install_mode">KPM Install</string>
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
<string name="kpm_install_mode_load">Load</string>
|
<string name="kpm_install_mode_load">Carga</string>
|
||||||
<string name="kpm_install_mode_embed">Embed</string>
|
<string name="kpm_install_mode_embed">Embutir</string>
|
||||||
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
<string name="kpm_install_mode_description">Por favor seleccione: %1\$s Modo de instalación del Módulo \n\nCarga: Cargar temporalmente el módulo \nInsertar: Instalar permanentemente en el sistema</string>
|
||||||
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
<string name="log_failed_to_check_module_file">Falha ao verificar a existência do arquivo do módulo</string>
|
||||||
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
<string name="snackbar_failed_to_check_module_file">Não foi possível verificar se o arquivo do módulo existe</string>
|
||||||
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
<string name="confirm_uninstall_title">Confirmar Desinstalação</string>
|
||||||
<string name="confirm_uninstall_confirm">Uninstall</string>
|
<string name="confirm_uninstall_confirm">Desinstalar</string>
|
||||||
<string name="confirm_uninstall_dismiss">Cancel</string>
|
<string name="confirm_uninstall_dismiss">Cancelar</string>
|
||||||
<string name="theme_color">Theme Color</string>
|
<string name="theme_color">Cor do tema</string>
|
||||||
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
<string name="invalid_file_type">Tipo de arquivo incorreto! Selecione o arquivo .kpm.</string>
|
||||||
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
<string name="confirm_uninstall_title_with_filename">Desinstalar</string>
|
||||||
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
<string name="confirm_uninstall_content">O seguinte KPM será desinstalado: %s</string>
|
||||||
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
<string name="settings_susfs_toggle_summary">Desative os hooks kprobe criados pelo KernelSU, usando ganchos embutidos em vez disso, o que é semelhante ao método de gancho do kernel GKI.</string>
|
||||||
<string name="image_editor_title">Adjust background image</string>
|
<string name="image_editor_title">Ajustar imagem de fundo</string>
|
||||||
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
<string name="image_editor_hint">Use dois dedos para ampliar a imagem e um dedo para arrastá-la para ajustar a posição</string>
|
||||||
<string name="background_image_error">Could not load image</string>
|
<string name="background_image_error">Não foi possível carregar a imagem</string>
|
||||||
<string name="reprovision">Reprovision</string>
|
<string name="reprovision">Restituição</string>
|
||||||
<!-- Kernel Flash Progress Related -->
|
<!-- Kernel Flash Progress Related -->
|
||||||
<string name="horizon_flash_title">Kernel Flashing</string>
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
<string name="horizon_logs_label">Logs:</string>
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
<string name="horizon_flash_complete">Flash Complete</string>
|
<string name="horizon_flash_complete">Flash concluído</string>
|
||||||
<!-- Flash Status Related -->
|
<!-- Flash Status Related -->
|
||||||
<string name="horizon_preparing">Preparing…</string>
|
<string name="horizon_preparing">Preparando…</string>
|
||||||
<string name="horizon_cleaning_files">Cleaning files…</string>
|
<string name="horizon_cleaning_files">limpando arquivos…</string>
|
||||||
<string name="horizon_copying_files">Copying files…</string>
|
<string name="horizon_copying_files">Copiando arquivo…</string>
|
||||||
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
<string name="horizon_extracting_tool">Extraindo a ferramenta flash…</string>
|
||||||
<string name="horizon_patching_script">Patching flash script…</string>
|
<string name="horizon_patching_script">Atualizando o script flash…</string>
|
||||||
<string name="horizon_flashing">Flashing kernel…</string>
|
<string name="horizon_flashing">Flasheando kernel…</string>
|
||||||
<string name="horizon_flash_complete_status">Flash completed</string>
|
<string name="horizon_flash_complete_status">Flash completo</string>
|
||||||
<!-- Slot selection related strings -->
|
<!-- Slot selection related strings -->
|
||||||
<string name="select_slot_title">Select Flash Slot</string>
|
<string name="select_slot_title">Selecionar Slot em Flash</string>
|
||||||
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
<string name="select_slot_description">Por favor, selecione o slot de destino para flashear a inicialização</string>
|
||||||
<string name="slot_a">Slot A</string>
|
<string name="slot_a">Slot B</string>
|
||||||
<string name="slot_b">Slot B</string>
|
<string name="slot_b">Slot B</string>
|
||||||
<string name="selected_slot">Selected slot: %1$s</string>
|
<string name="selected_slot">Slot selecionado: %1$s</string>
|
||||||
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
<string name="horizon_getting_original_slot">Obtendo o espaço original</string>
|
||||||
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
<string name="horizon_setting_target_slot">Configurando o slot especificado</string>
|
||||||
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
<string name="horizon_restoring_original_slot">Restaurar Slot Padrão</string>
|
||||||
<string name="current_slot">Current Slot:%1$s </string>
|
<string name="current_slot">Slot Atual:%1$s </string>
|
||||||
<!-- Error Messages -->
|
<!-- Error Messages -->
|
||||||
<string name="horizon_copy_failed">Copy failed</string>
|
<string name="horizon_copy_failed">Falha ao copiar</string>
|
||||||
<string name="horizon_unknown_error">Unknown error</string>
|
<string name="horizon_unknown_error">Você parece estar convertendo de um formato com degradação para um sem perdas. Esteja ciente que a perda de qualidade não pode ser desfeita, então este processo não melhorará a qualidade do áudio e provavelmente aumentará o tamanho do arquivo. Continuar assim mesmo?</string>
|
||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash falhou</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM reparo/instalação</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Usando a ferramenta de correção:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configurar</string>
|
||||||
<string name="app_settings">Application Settings</string>
|
<string name="app_settings">Configurações Do Aplicativo</string>
|
||||||
<string name="tools">Tools</string>
|
<string name="tools">Ferramentas</string>
|
||||||
<string name="currently_selected">Currently</string>
|
<string name="currently_selected">Atual</string>
|
||||||
<!-- String resources used in SuperUser -->
|
<!-- String resources used in SuperUser -->
|
||||||
<string name="clear">Removals</string>
|
<string name="clear">Remoções</string>
|
||||||
<string name="apps_with_root">Applications with root privileges</string>
|
<string name="apps_with_root">Aplicativos com privilégios de superusuário</string>
|
||||||
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
<string name="apps_with_custom_profile">Aplicativos com configurações personalizadas</string>
|
||||||
<string name="other_apps">Applications with unchanged defaults</string>
|
<string name="other_apps">Aplicações com padrões não alterados</string>
|
||||||
<string name="no_apps_found">Application not found</string>
|
<string name="no_apps_found">Aplicativo não encontrado</string>
|
||||||
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
<string name="selinux_enabled_toast">SELinux habilitado</string>
|
||||||
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
<string name="selinux_disabled_toast">SELinux Desativado</string>
|
||||||
<string name="selinux_change_failed">SELinux Status change failed</string>
|
<string name="selinux_change_failed">Falha na alteração de estado do SELinux</string>
|
||||||
<string name="advanced_settings">Advanced Settings</string>
|
<string name="advanced_settings">Configurações Avançadas</string>
|
||||||
<string name="appearance_settings">Customize the toolbar</string>
|
<string name="appearance_settings">Personaliza a barra de ferramentas.</string>
|
||||||
<string name="back">Comeback</string>
|
<string name="back">Retorno</string>
|
||||||
<string name="expand">Be in full swing</string>
|
<string name="expand">Esteja em pleno balanço</string>
|
||||||
<string name="collapse">put away</string>
|
<string name="collapse">jogou fora</string>
|
||||||
<string name="susfs_enabled">SuSFS enabled</string>
|
<string name="susfs_enabled">SuSFS habilitado</string>
|
||||||
<string name="susfs_disabled">SuSFS disabled</string>
|
<string name="susfs_disabled">SuSFS desativado</string>
|
||||||
<string name="background_set_success">Background set successfully</string>
|
<string name="background_set_success">Fundo definido com sucesso</string>
|
||||||
<string name="background_removed">Removed custom backgrounds</string>
|
<string name="background_removed">Remover</string>
|
||||||
<string name="root_require_for_install">Requires root privileges</string>
|
<string name="root_require_for_install">Requer privilégios de superusuário</string>
|
||||||
<!-- KPM display settings -->
|
<!-- KPM display settings -->
|
||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Exibir função KPM</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Exibir informações e funções do KPM na barra inicial e inferior (Precisa reabrir o aplicativo)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Injetar Eruda na WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Injetar um console de depuração na WebUI X para facilitar a depuração. Requer depuração da web para estar ligada.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
<string name="dpi_settings">DPI setting</string>
|
<string name="dpi_settings">Configuração de DPI</string>
|
||||||
<string name="app_dpi_title">Applied DPI</string>
|
<string name="app_dpi_title">DPI aplicado</string>
|
||||||
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
<string name="app_dpi_summary">Ajustar a densidade de exibição da tela apenas para o aplicativo atual</string>
|
||||||
<string name="dpi_size_small">Small </string>
|
<string name="dpi_size_small">Pequeno </string>
|
||||||
<string name="dpi_size_medium">Medium </string>
|
<string name="dpi_size_medium">Média </string>
|
||||||
<string name="dpi_size_large">Big</string>
|
<string name="dpi_size_large">Grande</string>
|
||||||
<string name="dpi_size_extra_large">oversize</string>
|
<string name="dpi_size_extra_large">extra grande</string>
|
||||||
<string name="dpi_size_custom">customizable</string>
|
<string name="dpi_size_custom">Customizável</string>
|
||||||
<string name="dpi_apply_settings">Applying DPI settings</string>
|
<string name="dpi_apply_settings">Aplicando configurações de DPI</string>
|
||||||
<string name="dpi_confirm_title">Confirm DPI change</string>
|
<string name="dpi_confirm_title">Confirmar alteração de DPI</string>
|
||||||
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
<string name="dpi_confirm_message">Tem certeza que deseja alterar o DPI do aplicativo do %1$d para %2$d?</string>
|
||||||
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
<string name="dpi_confirm_summary">O aplicativo precisa ser reiniciado para aplicar as novas configurações DPI, não afeta a barra de status do sistema ou outras aplicações</string>
|
||||||
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
<string name="dpi_applied_success">DPI foi definido para %1$d, efetivo após reiniciar o aplicativo</string>
|
||||||
<!-- Language settings related strings -->
|
<!-- Language settings related strings -->
|
||||||
<string name="language_setting">App Language</string>
|
<string name="language_setting">Língua do aplicativo</string>
|
||||||
<string name="language_follow_system">Follow System</string>
|
<string name="language_follow_system">Padrão do sistema</string>
|
||||||
<string name="language_changed">Language changed, restarting to apply changes</string>
|
<string name="language_changed">Idioma alterado, reiniciando para aplicar as alterações</string>
|
||||||
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
<string name="settings_card_dim">Ajuste da escuridão do cartão</string>
|
||||||
<!-- Super User Related -->
|
<!-- Super User Related -->
|
||||||
<string name="scroll_to_top">Top</string>
|
<string name="scroll_to_top">Mais votados</string>
|
||||||
<string name="scroll_to_bottom">Bottom</string>
|
<string name="scroll_to_bottom">Parte Inferior</string>
|
||||||
<string name="scroll_to_top_description">Scroll to top</string>
|
<string name="scroll_to_top_description">Rolar para o topo</string>
|
||||||
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
<string name="scroll_to_bottom_description">Role até o final</string>
|
||||||
<string name="authorized">authorized</string>
|
<string name="authorized">autorizado</string>
|
||||||
<string name="unauthorized">unauthorized</string>
|
<string name="unauthorized">Não autorizado</string>
|
||||||
<string name="selected">Selected</string>
|
<string name="selected">Selecionado</string>
|
||||||
<string name="select">option</string>
|
<string name="select">opção</string>
|
||||||
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
<string name="profile_umount_modules_disable">Desativar o módulo personalizado de desinstalação</string>
|
||||||
<!-- Flash related -->
|
<!-- Flash related -->
|
||||||
<string name="error_code">error code</string>
|
<string name="error_code">Código de erro</string>
|
||||||
<string name="check_log">Please check the log</string>
|
<string name="check_log">Por favor, verifique o log</string>
|
||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Módulo sendo instalado %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Falha ao instalar um novo módulo</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Falha ao baixar módulo</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Nu s-a acordat acces root!</string>
|
<string name="grant_root_failed">Nu s-a acordat acces root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Deschide</string>
|
<string name="open">Deschide</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Activează depanarea WebView</string>
|
<string name="enable_web_debugging">Activează depanarea WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Poate fi folosit pentru a depana WebUI, activează numai când este necesar.</string>
|
<string name="enable_web_debugging_summary">Poate fi folosit pentru a depana WebUI, activează numai când este necesar.</string>
|
||||||
<string name="direct_install">Instalare directă (recomandat)</string>
|
<string name="direct_install">Instalare directă (recomandat)</string>
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -225,7 +226,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -328,8 +328,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -367,4 +369,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
<string name="home_superuser_count">Суперпользователи: %d</string>
|
<string name="home_superuser_count">Суперпользователи: %d</string>
|
||||||
<string name="home_module_count">Модули: %d</string>
|
<string name="home_module_count">Модули: %d</string>
|
||||||
<string name="home_unsupported">Не поддерживается</string>
|
<string name="home_unsupported">Не поддерживается</string>
|
||||||
<string name="home_unsupported_reason">KernelSU поддерживает только GKI ядра</string>
|
<string name="home_unsupported_reason">Драйвера KernelSU не найдены в ядре, не то ядро?</string>
|
||||||
<string name="home_kernel">Ядро</string>
|
<string name="home_kernel">Ядро</string>
|
||||||
<string name="home_susfs">SuSFS: %s</string>
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
<string name="home_susfs_version">SuSFS Version</string>
|
<string name="home_susfs_version">Версия SuSFS</string>
|
||||||
<string name="home_susfs_sus_su">SuS SU</string>
|
<string name="home_susfs_sus_su">SuS SU</string>
|
||||||
<string name="home_manager_version">Версия менеджера</string>
|
<string name="home_manager_version">Версия менеджера</string>
|
||||||
<string name="home_fingerprint">Подпись</string>
|
<string name="home_fingerprint">Подпись</string>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<string name="selinux_status_enforcing">Принудительный</string>
|
<string name="selinux_status_enforcing">Принудительный</string>
|
||||||
<string name="selinux_status_permissive">Разрешающий</string>
|
<string name="selinux_status_permissive">Разрешающий</string>
|
||||||
<string name="selinux_status_unknown">Неизвестно</string>
|
<string name="selinux_status_unknown">Неизвестно</string>
|
||||||
<string name="superuser">SU пользователь</string>
|
<string name="superuser">Суперпользователь</string>
|
||||||
<string name="module_failed_to_enable">Не удалось включить модуль %s</string>
|
<string name="module_failed_to_enable">Не удалось включить модуль %s</string>
|
||||||
<string name="module_failed_to_disable">Не удалось отключить модуль %s</string>
|
<string name="module_failed_to_disable">Не удалось отключить модуль %s</string>
|
||||||
<string name="module_empty">Нет установленных модулей</string>
|
<string name="module_empty">Нет установленных модулей</string>
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
<string name="module_sort_action_first">Сортировать (Сначала с действием)</string>
|
<string name="module_sort_action_first">Сортировать (Сначала с действием)</string>
|
||||||
<string name="module_sort_enabled_first">Сортировать (Сначала включённые)</string>
|
<string name="module_sort_enabled_first">Сортировать (Сначала включённые)</string>
|
||||||
<string name="uninstall">Удалить</string>
|
<string name="uninstall">Удалить</string>
|
||||||
<string name="restore">Restore</string>
|
<string name="restore">Восстановить</string>
|
||||||
<string name="module_install">Установить</string>
|
<string name="module_install">Установить</string>
|
||||||
<string name="install">Установка</string>
|
<string name="install">Установка</string>
|
||||||
<string name="reboot">Перезагрузить</string>
|
<string name="reboot">Перезагрузить</string>
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
<string name="module_uninstall_failed">Не удалось удалить %s</string>
|
<string name="module_uninstall_failed">Не удалось удалить %s</string>
|
||||||
<string name="module_version">Версия</string>
|
<string name="module_version">Версия</string>
|
||||||
<string name="module_author">Автор</string>
|
<string name="module_author">Автор</string>
|
||||||
<string name="refresh">Обновить страницу</string>
|
<string name="refresh">Обновить</string>
|
||||||
<string name="show_system_apps">Показать системные приложения</string>
|
<string name="show_system_apps">Показать системные приложения</string>
|
||||||
<string name="hide_system_apps">Скрыть системные приложения</string>
|
<string name="hide_system_apps">Скрыть системные приложения</string>
|
||||||
<string name="send_log">Отправить логи</string>
|
<string name="send_log">Отправить логи</string>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">Узнайте, как установить KernelSU и использовать модули</string>
|
<string name="home_click_to_learn_kernelsu">Узнайте, как установить KernelSU и использовать модули</string>
|
||||||
<string name="home_support_title">Поддержите нас</string>
|
<string name="home_support_title">Поддержите нас</string>
|
||||||
<string name="home_support_content">KernelSU был и всегда будет бесплатным и открытым проектом. Однако Вы всегда можете поддержать нас, отправив небольшое пожертвование.</string>
|
<string name="home_support_content">KernelSU был и всегда будет бесплатным и открытым проектом. Однако Вы всегда можете поддержать нас, отправив небольшое пожертвование.</string>
|
||||||
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
<string name="about_source_code"><![CDATA[Просмотреть исходный код на %1$s<br/>Присоединяйтесь к нашему %2$s каналу]]></string>
|
||||||
<string name="profile_default">По умолчанию</string>
|
<string name="profile_default">По умолчанию</string>
|
||||||
<string name="profile_template">Шаблон</string>
|
<string name="profile_template">Шаблон</string>
|
||||||
<string name="profile_custom">Пользовательский</string>
|
<string name="profile_custom">Пользовательский</string>
|
||||||
@@ -70,10 +70,10 @@
|
|||||||
<string name="profile_selinux_context">Контекст SELinux</string>
|
<string name="profile_selinux_context">Контекст SELinux</string>
|
||||||
<string name="profile_umount_modules">Размонтировать модули</string>
|
<string name="profile_umount_modules">Размонтировать модули</string>
|
||||||
<string name="failed_to_update_app_profile">Не удалось обновить App Profile для %s</string>
|
<string name="failed_to_update_app_profile">Не удалось обновить App Profile для %s</string>
|
||||||
<string name="require_kernel_version" formatted="false">The current KernelSU version %d is too low for the manager to work properly. Please upgrade to version %d or higher!</string>
|
<string name="require_kernel_version" formatted="false">Текущая версия KernelSU %d слишком низкая для правильной работы менеджера. Пожалуйста, обновите до версии %d или выше!</string>
|
||||||
<string name="settings_umount_modules_default">Размонтировать модули по умолчанию</string>
|
<string name="settings_umount_modules_default">Размонтировать модули по умолчанию</string>
|
||||||
<string name="settings_umount_modules_default_summary">Глобальное значение по умолчанию для \"Размонтировать модули\" в App Profile. При включении будут удалены все модификации модулей в системе для приложений, у которых не задан Profile.</string>
|
<string name="settings_umount_modules_default_summary">Глобальное значение по умолчанию для \"Размонтировать модули\" в профиле приложения. При включении будут удалены все модификации модулей в системе для приложений, у которых не задан профиль</string>
|
||||||
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
<string name="settings_susfs_toggle">Отключить kprobe хуки</string>
|
||||||
<string name="profile_umount_modules_summary">Включение этой опции позволит KernelSU восстанавливать любые измененные модулями файлы для данного приложения.</string>
|
<string name="profile_umount_modules_summary">Включение этой опции позволит KernelSU восстанавливать любые измененные модулями файлы для данного приложения.</string>
|
||||||
<string name="profile_selinux_domain">Домен</string>
|
<string name="profile_selinux_domain">Домен</string>
|
||||||
<string name="profile_selinux_rules">Правила</string>
|
<string name="profile_selinux_rules">Правила</string>
|
||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Не удалось выдать root!</string>
|
<string name="grant_root_failed">Не удалось выдать root!</string>
|
||||||
<string name="action">Действие</string>
|
<string name="action">Действие</string>
|
||||||
<string name="open">Открыть</string>
|
<string name="open">Открыть</string>
|
||||||
|
<string name="close">Закрыть</string>
|
||||||
<string name="enable_web_debugging">Включить отладку WebView</string>
|
<string name="enable_web_debugging">Включить отладку WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Используется для отладки WebUI. Пожалуйста, включайте только при необходимости.</string>
|
<string name="enable_web_debugging_summary">Используется для отладки WebUI. Пожалуйста, включайте только при необходимости.</string>
|
||||||
<string name="direct_install">Прямая установка (Рекомендуется)</string>
|
<string name="direct_install">Прямая установка (Рекомендуется)</string>
|
||||||
@@ -129,7 +130,7 @@
|
|||||||
<string name="settings_uninstall_permanent">Удалить полностью</string>
|
<string name="settings_uninstall_permanent">Удалить полностью</string>
|
||||||
<string name="settings_restore_stock_image">Восстановить сток образ</string>
|
<string name="settings_restore_stock_image">Восстановить сток образ</string>
|
||||||
<string name="settings_uninstall_temporary_message">Временно удалить KernelSU, восстановить исходное состояние после следующей перезагрузки.</string>
|
<string name="settings_uninstall_temporary_message">Временно удалить KernelSU, восстановить исходное состояние после следующей перезагрузки.</string>
|
||||||
<string name="settings_uninstall_permanent_message">Удалить KernelSU (Root и все модули) полностью.</string>
|
<string name="settings_uninstall_permanent_message">Удалить KernelSU (рут и все модули) полностью.</string>
|
||||||
<string name="settings_restore_stock_image_message">Восстановить исходный заводской образ (если существует резервная копия), обычно используется перед OTA; если вам нужно удалить KernelSU, используйте «Удалить полностью».</string>
|
<string name="settings_restore_stock_image_message">Восстановить исходный заводской образ (если существует резервная копия), обычно используется перед OTA; если вам нужно удалить KernelSU, используйте «Удалить полностью».</string>
|
||||||
<string name="flashing">Установка</string>
|
<string name="flashing">Установка</string>
|
||||||
<string name="flash_success">Установка выполнена</string>
|
<string name="flash_success">Установка выполнена</string>
|
||||||
@@ -137,234 +138,236 @@
|
|||||||
<string name="selected_lkm">Выбран LKM: %s</string>
|
<string name="selected_lkm">Выбран LKM: %s</string>
|
||||||
<string name="save_log">Сохранить логи</string>
|
<string name="save_log">Сохранить логи</string>
|
||||||
<string name="log_saved">Логи сохранены</string>
|
<string name="log_saved">Логи сохранены</string>
|
||||||
<string name="status_supported">Supported</string>
|
<string name="status_supported">Поддерживается</string>
|
||||||
<string name="status_not_supported">Not Supported</string>
|
<string name="status_not_supported">Не поддерживается</string>
|
||||||
<string name="status_unknown">Unknown</string>
|
<string name="status_unknown">Неизвестно</string>
|
||||||
<string name="sus_su_mode">SuS SU mode:</string>
|
<string name="sus_su_mode">SuS SU режим:</string>
|
||||||
<!-- Module related -->
|
<!-- Module related -->
|
||||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
<string name="module_install_confirm">подтвердите установку модуля %1$s?</string>
|
||||||
<string name="unknown_module">unknown module</string>
|
<string name="unknown_module">неизвестный модуль</string>
|
||||||
<!-- Restore related -->
|
<!-- Restore related -->
|
||||||
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
<string name="restore_confirm_title">Подтвердите восстановление модуля</string>
|
||||||
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
<string name="restore_confirm_message">Эта операция перезапишет все существующие модули. Продолжить?</string>
|
||||||
<string name="confirm">Confirm</string>
|
<string name="confirm">Подтвердить</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">Отмена</string>
|
||||||
<!-- Backup related -->
|
<!-- Backup related -->
|
||||||
<string name="backup_success">Backup successful (tar.gz)</string>
|
<string name="backup_success">Успешная резервная копия (tar.gz)</string>
|
||||||
<string name="backup_failed">Backup failed: %1$s</string>
|
<string name="backup_failed">Ошибка резервного копирования: %1$s</string>
|
||||||
<string name="backup_modules">backup modules</string>
|
<string name="backup_modules">Резервное копирование модулей</string>
|
||||||
<string name="restore_modules">restore modules</string>
|
<string name="restore_modules">Восстановить модули</string>
|
||||||
<!-- Restore related messages -->
|
<!-- Restore related messages -->
|
||||||
<string name="restore_success">Modules restored successfully, restart required</string>
|
<string name="restore_success">Модули восстановлены, требуется перезагрузка</string>
|
||||||
<string name="restore_failed">Restore failed: %1$s</string>
|
<string name="restore_failed">Ошибка восстановления: %1$s</string>
|
||||||
<string name="restart_now">Restart Now</string>
|
<string name="restart_now">Перезапустить сейчас</string>
|
||||||
<string name="unknown_error">Unknown error</string>
|
<string name="unknown_error">Неизвестная ошибка</string>
|
||||||
<!-- Command related -->
|
<!-- Command related -->
|
||||||
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
<string name="command_execution_failed">Выполнение команды не удалось: %1$s</string>
|
||||||
<!-- Allowlist related -->
|
<!-- Allowlist related -->
|
||||||
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
<string name="allowlist_backup_success">Резервное копирование успешно завершено</string>
|
||||||
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
<string name="allowlist_backup_failed">Ошибка резервного копирования списка: %1$s</string>
|
||||||
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
<string name="allowlist_restore_confirm_title">Подтвердите восстановление списка</string>
|
||||||
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
<string name="allowlist_restore_confirm_message">Эта операция перезапишет текущий список разрешений. Продолжить?</string>
|
||||||
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
<string name="allowlist_restore_success">Список успешно восстановлен</string>
|
||||||
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
<string name="allowlist_restore_failed">Не удалось восстановить список: %1$s</string>
|
||||||
<string name="backup_allowlist">Backup Allowlist</string>
|
<string name="backup_allowlist">Резервное копирование списка</string>
|
||||||
<string name="restore_allowlist">Restore Allowlist</string>
|
<string name="restore_allowlist">Восстановить список</string>
|
||||||
<string name="settings_custom_background">Custom App Background</string>
|
<string name="settings_custom_background">Пользовательский фон приложения</string>
|
||||||
<string name="settings_custom_background_summary">Select an image as background</string>
|
<string name="settings_custom_background_summary">Выберите изображение в качестве фона</string>
|
||||||
<string name="settings_card_alpha">Navigation bar transparency</string>
|
<string name="settings_card_alpha">Прозрачность панели навигации</string>
|
||||||
<string name="settings_restore_default">Restore default</string>
|
<string name="settings_restore_default">По умолчанию</string>
|
||||||
<string name="home_android_version">Android version</string>
|
<string name="home_android_version">Версия Android</string>
|
||||||
<string name="home_device_model">Device model</string>
|
<string name="home_device_model">Модель устройства</string>
|
||||||
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
<string name="su_not_allowed">Предоставление %s суперпользователю не допускается</string>
|
||||||
<string name="settings_disable_su">Disable su compatibility</string>
|
<string name="settings_disable_su">Отключить совместимость su</string>
|
||||||
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
<string name="settings_disable_su_summary">Временно отключить все приложения от получения привилегий суперпользователя через su команду (запущенные процессы с рут доступом не будут затронуты).</string>
|
||||||
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
<string name="using_mksu_manager">Вы используете менеджер SukiSU бета-версии</string>
|
||||||
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
<string name="module_install_multiple_confirm">Вы уверены, что хотите установить выбранные модули %d?</string>
|
||||||
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
<string name="module_install_multiple_confirm_with_names">Уверены, что хотите установить следующие %1$d модули? \n\n%2$s</string>
|
||||||
<string name="more_settings">More settings</string>
|
<string name="more_settings">Доп. настройки</string>
|
||||||
<string name="selinux">SELinux</string>
|
<string name="selinux">SELinux</string>
|
||||||
<string name="selinux_enabled">Enabled</string>
|
<string name="selinux_enabled">Включено</string>
|
||||||
<string name="selinux_disabled">Disabled</string>
|
<string name="selinux_disabled">Выключен</string>
|
||||||
<string name="simple_mode">Simplicity mode</string>
|
<string name="simple_mode">Режим простоты</string>
|
||||||
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
<string name="simple_mode_summary">Скрывает ненужные карты при включении</string>
|
||||||
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version">Скрыть версию ядра</string>
|
||||||
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version_summary">Скрыть версию ядра</string>
|
||||||
<string name="hide_other_info">Hide other info</string>
|
<string name="hide_other_info">Скрыть другую информацию</string>
|
||||||
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
<string name="hide_other_info_summary">Скрывает информацию о количестве суперпользователей, модулей и KPM-модулей на домашней странице</string>
|
||||||
<string name="hide_susfs_status">Hide SuSFS status</string>
|
<string name="hide_susfs_status">Скрыть статус SuSFS</string>
|
||||||
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
<string name="hide_susfs_status_summary">Скрыть информацию о статусе SuSFS на главной странице</string>
|
||||||
<string name="hide_link_card">Hide Link Card Status</string>
|
<string name="hide_link_card">Скрыть статус карточки ссылки</string>
|
||||||
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
<string name="hide_link_card_summary">Скрыть информацию о карте ссылки на главной странице</string>
|
||||||
<string name="theme_mode">Theme</string>
|
<string name="theme_mode">Тема</string>
|
||||||
<string name="theme_follow_system">Follow system</string>
|
<string name="theme_follow_system">Использовать системные настройки</string>
|
||||||
<string name="theme_light">Light</string>
|
<string name="theme_light">Светлая</string>
|
||||||
<string name="theme_dark">Dark</string>
|
<string name="theme_dark">Тёмная</string>
|
||||||
<string name="manual_hook">Manual Hook</string>
|
<string name="manual_hook">Подключено вручную</string>
|
||||||
<string name="dynamic_color_title">Dynamic colours</string>
|
<string name="dynamic_color_title">Динамический цвет</string>
|
||||||
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
<string name="dynamic_color_summary">Динамические цвета с использованием системных тем</string>
|
||||||
<string name="choose_theme_color">Choose a theme colour</string>
|
<string name="choose_theme_color">Выберите цвет темы</string>
|
||||||
<string name="color_default">Blue</string>
|
<string name="color_default">Синий</string>
|
||||||
<string name="color_green">Green</string>
|
<string name="color_green">Зеленый</string>
|
||||||
<string name="color_purple">Purple</string>
|
<string name="color_purple">Фиолетовый</string>
|
||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Оранжевый</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Розовый</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Серый</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Желтый</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Параметры прошивки</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Выберите файл для прошивки</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
<string name="horizon_kernel_summary">Файл ядра Flash AnyKernel3</string>
|
||||||
<string name="root_required">Requires root privileges</string>
|
<string name="root_required">Требуется root-права</string>
|
||||||
<string name="copy_failed">File Copy Failure</string>
|
<string name="copy_failed">Ошибка копирования файла</string>
|
||||||
<string name="reboot_complete_title">Scrubbing complete</string>
|
<string name="reboot_complete_title">Скрабровка завершена</string>
|
||||||
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
<string name="reboot_complete_msg">Будет ли перезагрузка немедленно?</string>
|
||||||
<string name="yes">Yes</string>
|
<string name="yes">Да</string>
|
||||||
<string name="no">No</string>
|
<string name="no">Нет</string>
|
||||||
<string name="failed_reboot">Reboot Failed</string>
|
<string name="failed_reboot">Не удалось перезагрузиться</string>
|
||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">расширить власть</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">расход</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Резервное копирование</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">На данный момент нет установленных модулей ядра</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Версия</string>
|
||||||
<string name="kpm_author">Author</string>
|
<string name="kpm_author">Автор</string>
|
||||||
<string name="kpm_uninstall">Uninstall</string>
|
<string name="kpm_uninstall">Удалить</string>
|
||||||
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
<string name="kpm_uninstall_success">Удаление завершено</string>
|
||||||
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
<string name="kpm_uninstall_failed">Не удалось удалить</string>
|
||||||
<string name="kpm_install">Install</string>
|
<string name="kpm_install">Установить</string>
|
||||||
<string name="kpm_install_success">Load of kpm module successful</string>
|
<string name="kpm_install_success">Модуль kpm успешно загружен</string>
|
||||||
<string name="kpm_install_failed">Load of kpm module failed</string>
|
<string name="kpm_install_failed">Ошибка загрузки модуля kpm</string>
|
||||||
<string name="kpm_args">Parameters</string>
|
<string name="kpm_args">Параметры</string>
|
||||||
<string name="kpm_control">Execute</string>
|
<string name="kpm_control">Выполнить</string>
|
||||||
<string name="home_kpm_version">KPM Version</string>
|
<string name="home_kpm_version">Версия KPM</string>
|
||||||
<string name="close_notice">Close</string>
|
<string name="close_notice">Закрыть</string>
|
||||||
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
<string name="kernel_module_notice">Следующие модульные функции ядра были разработаны KernelPatch и изменены для включения в него функций модуля ядра SukiSU Ultra</string>
|
||||||
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
<string name="home_ContributionCard_kernelsu">Будущее SukiSU Ultra</string>
|
||||||
<string name="kpm_control_success">Success</string>
|
<string name="kpm_control_success">Успешно</string>
|
||||||
<string name="kpm_control_failed">Failed</string>
|
<string name="kpm_control_failed">Провален</string>
|
||||||
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
<string name="home_click_to_ContributionCard_kernelsu">В будущем SukiSU Ultra будет относительно независимым ответвлением KSU, но мы по-прежнему ценим официальный KernelSU и MKSU и т.д. за их вклад!</string>
|
||||||
<string name="not_supported">Unsupported</string>
|
<string name="not_supported">Не поддерживается</string>
|
||||||
<string name="supported">Supported</string>
|
<string name="supported">Поддерживаемые</string>
|
||||||
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
<string name="home_kpm_module">"Количество KPM-модулей: %d "</string>
|
||||||
<string name="kpm_invalid_file">Invalid KPM file</string>
|
<string name="kpm_invalid_file">Недопустимый файл KPM</string>
|
||||||
<string name="kernel_patched">Kernel not patched</string>
|
<string name="kernel_patched">Ядро не изменено</string>
|
||||||
<string name="kernel_not_enabled">Kernel not configured</string>
|
<string name="kernel_not_enabled">Ядро не настроено</string>
|
||||||
<string name="custom_settings">Custom settings</string>
|
<string name="custom_settings">Другие уровни доступа</string>
|
||||||
<string name="kpm_install_mode">KPM Install</string>
|
<string name="kpm_install_mode">KPM Install</string>
|
||||||
<string name="kpm_install_mode_load">Load</string>
|
<string name="kpm_install_mode_load">Загрузить</string>
|
||||||
<string name="kpm_install_mode_embed">Embed</string>
|
<string name="kpm_install_mode_embed">Код для вставки</string>
|
||||||
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
<string name="kpm_install_mode_description">Пожалуйста, выберите %1\$s режим установки модуля \n\nЗагрузить: Временно загрузить модуль \nВстроенный: Окончательно установить в систему</string>
|
||||||
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
<string name="log_failed_to_check_module_file">Не удалось проверить наличие файла модуля</string>
|
||||||
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
<string name="snackbar_failed_to_check_module_file">Не удалось проверить наличие файла модуля</string>
|
||||||
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
<string name="confirm_uninstall_title">Подтверждение удаления</string>
|
||||||
<string name="confirm_uninstall_confirm">Uninstall</string>
|
<string name="confirm_uninstall_confirm">Удалить</string>
|
||||||
<string name="confirm_uninstall_dismiss">Cancel</string>
|
<string name="confirm_uninstall_dismiss">Отмена</string>
|
||||||
<string name="theme_color">Theme Color</string>
|
<string name="theme_color">Цвет Темы</string>
|
||||||
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
<string name="invalid_file_type">Неверный тип файла! Пожалуйста, выберите .kpm файл.</string>
|
||||||
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
<string name="confirm_uninstall_title_with_filename">Удалить</string>
|
||||||
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
<string name="confirm_uninstall_content">Следующие KPM будут удалены: %s</string>
|
||||||
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
<string name="settings_susfs_toggle_summary">Отключите хуки kprobe, созданные KernelSU, используя встроенные хуки, которые похожи на метод расширения ядра вне GKI.</string>
|
||||||
<string name="image_editor_title">Adjust background image</string>
|
<string name="image_editor_title">Настроить фоновое изображение</string>
|
||||||
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
<string name="image_editor_hint">Используйте два пальца для увеличения изображения, и один палец для изменения положения</string>
|
||||||
<string name="background_image_error">Could not load image</string>
|
<string name="background_image_error">Не удалось загрузить изображение</string>
|
||||||
<string name="reprovision">Reprovision</string>
|
<string name="reprovision">Реализация</string>
|
||||||
<!-- Kernel Flash Progress Related -->
|
<!-- Kernel Flash Progress Related -->
|
||||||
<string name="horizon_flash_title">Kernel Flashing</string>
|
<string name="horizon_flash_title">Мигание ядра</string>
|
||||||
<string name="horizon_logs_label">Logs:</string>
|
<string name="horizon_logs_label">Логи:</string>
|
||||||
<string name="horizon_flash_complete">Flash Complete</string>
|
<string name="horizon_flash_complete">Вспышка завершена</string>
|
||||||
<!-- Flash Status Related -->
|
<!-- Flash Status Related -->
|
||||||
<string name="horizon_preparing">Preparing…</string>
|
<string name="horizon_preparing">Подготовка…</string>
|
||||||
<string name="horizon_cleaning_files">Cleaning files…</string>
|
<string name="horizon_cleaning_files">Очистка файлов…</string>
|
||||||
<string name="horizon_copying_files">Copying files…</string>
|
<string name="horizon_copying_files">Копирование файлов…</string>
|
||||||
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
<string name="horizon_extracting_tool">Извлечение флэш инструмента…</string>
|
||||||
<string name="horizon_patching_script">Patching flash script…</string>
|
<string name="horizon_patching_script">Изменение флэш-скрипта…</string>
|
||||||
<string name="horizon_flashing">Flashing kernel…</string>
|
<string name="horizon_flashing">Прошивка ядра…</string>
|
||||||
<string name="horizon_flash_complete_status">Flash completed</string>
|
<string name="horizon_flash_complete_status">Прошивка завершена</string>
|
||||||
<!-- Slot selection related strings -->
|
<!-- Slot selection related strings -->
|
||||||
<string name="select_slot_title">Select Flash Slot</string>
|
<string name="select_slot_title">Выбрать слот Flash</string>
|
||||||
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
<string name="select_slot_description">Пожалуйста, выберите целевой слот для прошивки загрузки</string>
|
||||||
<string name="slot_a">Slot A</string>
|
<string name="slot_a">Слот A</string>
|
||||||
<string name="slot_b">Slot B</string>
|
<string name="slot_b">Слот B</string>
|
||||||
<string name="selected_slot">Selected slot: %1$s</string>
|
<string name="selected_slot">Выбран LKM: %1$s</string>
|
||||||
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
<string name="horizon_getting_original_slot">Получение оригинальной ячейки</string>
|
||||||
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
<string name="horizon_setting_target_slot">Установка указанного слота</string>
|
||||||
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
<string name="horizon_restoring_original_slot">Восстановить</string>
|
||||||
<string name="current_slot">Current Slot:%1$s </string>
|
<string name="current_slot">Текущий слот:%1$s </string>
|
||||||
<!-- Error Messages -->
|
<!-- Error Messages -->
|
||||||
<string name="horizon_copy_failed">Copy failed</string>
|
<string name="horizon_copy_failed">Копирование не удалось</string>
|
||||||
<string name="horizon_unknown_error">Unknown error</string>
|
<string name="horizon_unknown_error">Неизвестная ошибка</string>
|
||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Установка не выполнена</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">Ремонт/установка LKM</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Прошить AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Ядро</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">С помощью инструмента патрулирования:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Настройка</string>
|
||||||
<string name="app_settings">Application Settings</string>
|
<string name="app_settings">Настройки приложения</string>
|
||||||
<string name="tools">Tools</string>
|
<string name="tools">Инструменты</string>
|
||||||
<string name="currently_selected">Currently</string>
|
<string name="currently_selected">В данный момент</string>
|
||||||
<!-- String resources used in SuperUser -->
|
<!-- String resources used in SuperUser -->
|
||||||
<string name="clear">Removals</string>
|
<string name="clear">Удаление</string>
|
||||||
<string name="apps_with_root">Applications with root privileges</string>
|
<string name="apps_with_root">Приложения с привилегиями root</string>
|
||||||
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
<string name="apps_with_custom_profile">Приложения с настроенными конфигурациями</string>
|
||||||
<string name="other_apps">Applications with unchanged defaults</string>
|
<string name="other_apps">Приложения со значениями по умолчанию</string>
|
||||||
<string name="no_apps_found">Application not found</string>
|
<string name="no_apps_found">Приложение не найдено</string>
|
||||||
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
<string name="selinux_enabled_toast">SELinux включен</string>
|
||||||
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
<string name="selinux_disabled_toast">SELinux отключен</string>
|
||||||
<string name="selinux_change_failed">SELinux Status change failed</string>
|
<string name="selinux_change_failed">Сбой изменения статуса SELinux</string>
|
||||||
<string name="advanced_settings">Advanced Settings</string>
|
<string name="advanced_settings">Расширенные настройки</string>
|
||||||
<string name="appearance_settings">Customize the toolbar</string>
|
<string name="appearance_settings">Настройка панели инструментов.</string>
|
||||||
<string name="back">Comeback</string>
|
<string name="back">Возвращение</string>
|
||||||
<string name="expand">Be in full swing</string>
|
<string name="expand">Будьте в полном шаге</string>
|
||||||
<string name="collapse">put away</string>
|
<string name="collapse">Свернуть</string>
|
||||||
<string name="susfs_enabled">SuSFS enabled</string>
|
<string name="susfs_enabled">SuSFS включен</string>
|
||||||
<string name="susfs_disabled">SuSFS disabled</string>
|
<string name="susfs_disabled">SuSFS выключен</string>
|
||||||
<string name="background_set_success">Background set successfully</string>
|
<string name="background_set_success">Фон успешно установлен</string>
|
||||||
<string name="background_removed">Removed custom backgrounds</string>
|
<string name="background_removed">Удалить свой фон</string>
|
||||||
<string name="root_require_for_install">Requires root privileges</string>
|
<string name="root_require_for_install">Требуется root-права</string>
|
||||||
<!-- KPM display settings -->
|
<!-- KPM display settings -->
|
||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Показать функцию KPM</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Отображение информации и функции KPM в домашней и нижней панели (необходимо переоткрыть приложение)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Выбрать движок WebUi</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Автовыбор</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="engine_force_webuix">WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="engine_force_ksu">KSU WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">Вставить Eruda в WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">Вставьте консоль отладки в WebUI X для упрощения отладки. Для этого требуется включение веб-отладки.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
<string name="dpi_settings">DPI setting</string>
|
<string name="dpi_settings">Настройка DPI</string>
|
||||||
<string name="app_dpi_title">Applied DPI</string>
|
<string name="app_dpi_title">Изменить DPI</string>
|
||||||
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
<string name="app_dpi_summary">Регулировка плотности экрана только для текущего приложения</string>
|
||||||
<string name="dpi_size_small">Small </string>
|
<string name="dpi_size_small">маленький</string>
|
||||||
<string name="dpi_size_medium">Medium </string>
|
<string name="dpi_size_medium">средний</string>
|
||||||
<string name="dpi_size_large">Big</string>
|
<string name="dpi_size_large">большой</string>
|
||||||
<string name="dpi_size_extra_large">oversize</string>
|
<string name="dpi_size_extra_large"> огромный</string>
|
||||||
<string name="dpi_size_custom">customizable</string>
|
<string name="dpi_size_custom">настраиваемый</string>
|
||||||
<string name="dpi_apply_settings">Applying DPI settings</string>
|
<string name="dpi_apply_settings">Применить настройки DPI</string>
|
||||||
<string name="dpi_confirm_title">Confirm DPI change</string>
|
<string name="dpi_confirm_title">Подтвердите изменение DPI</string>
|
||||||
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
<string name="dpi_confirm_message">Вы уверены, что хотите изменить DPI приложения с %1$d на %2$d?</string>
|
||||||
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
<string name="dpi_confirm_summary">Приложение должно быть перезапущено, чтобы применить новые настройки DPI, не влияет на системную строку состояния или другие приложения</string>
|
||||||
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
<string name="dpi_applied_success">DPI был установлен в %1$d, действующий после перезапуска приложения</string>
|
||||||
<!-- Language settings related strings -->
|
<!-- Language settings related strings -->
|
||||||
<string name="language_setting">App Language</string>
|
<string name="language_setting">Язык приложения</string>
|
||||||
<string name="language_follow_system">Follow System</string>
|
<string name="language_follow_system">Как в системе</string>
|
||||||
<string name="language_changed">Language changed, restarting to apply changes</string>
|
<string name="language_changed">Язык изменён, перезапуск для применения изменений</string>
|
||||||
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
<string name="settings_card_dim">Корректировка \"Тьма Карты\"</string>
|
||||||
<!-- Super User Related -->
|
<!-- Super User Related -->
|
||||||
<string name="scroll_to_top">Top</string>
|
<string name="scroll_to_top">Лучшие</string>
|
||||||
<string name="scroll_to_bottom">Bottom</string>
|
<string name="scroll_to_bottom">Снизу</string>
|
||||||
<string name="scroll_to_top_description">Scroll to top</string>
|
<string name="scroll_to_top_description">Прокрутить к началу</string>
|
||||||
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
<string name="scroll_to_bottom_description">Прокрутить в конец страницы</string>
|
||||||
<string name="authorized">authorized</string>
|
<string name="authorized">авторизован</string>
|
||||||
<string name="unauthorized">unauthorized</string>
|
<string name="unauthorized">неавторизован</string>
|
||||||
<string name="selected">Selected</string>
|
<string name="selected">Выбранные</string>
|
||||||
<string name="select">option</string>
|
<string name="select">опция</string>
|
||||||
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
<string name="profile_umount_modules_disable">Отключить пользовательский модуль удаления</string>
|
||||||
<!-- Flash related -->
|
<!-- Flash related -->
|
||||||
<string name="error_code">error code</string>
|
<string name="error_code">код ошибки</string>
|
||||||
<string name="check_log">Please check the log</string>
|
<string name="check_log">Пожалуйста, проверьте журнал</string>
|
||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Модуль устанавливается %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d не удалось установить новый модуль</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Ошибка загрузки модуля</string>
|
||||||
|
<string name="kernel_flashing">Прошить ядро</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Failed to grant root!</string>
|
<string name="grant_root_failed">Failed to grant root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Open</string>
|
<string name="open">Open</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Enable WebView debugging</string>
|
<string name="enable_web_debugging">Enable WebView debugging</string>
|
||||||
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
<string name="enable_web_debugging_summary">Can be used to debug WebUI. Please enable only when needed.</string>
|
||||||
<string name="direct_install">Direct install (Recommended)</string>
|
<string name="direct_install">Direct install (Recommended)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">ไม่สามารถให้สิทธิ์รูทได้!</string>
|
<string name="grant_root_failed">ไม่สามารถให้สิทธิ์รูทได้!</string>
|
||||||
<string name="action">คำสั่ง</string>
|
<string name="action">คำสั่ง</string>
|
||||||
<string name="open">เปิด</string>
|
<string name="open">เปิด</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">เปิดใช้งานการแก้ไขข้อบกพร่อง WebView</string>
|
<string name="enable_web_debugging">เปิดใช้งานการแก้ไขข้อบกพร่อง WebView</string>
|
||||||
<string name="enable_web_debugging_summary">ใช้เพื่อดีบัก WebUI เท่านั้น โปรดเปิดใช้งานเมื่อจำเป็น</string>
|
<string name="enable_web_debugging_summary">ใช้เพื่อดีบัก WebUI เท่านั้น โปรดเปิดใช้งานเมื่อจำเป็น</string>
|
||||||
<string name="direct_install">ติดตั้งโดยตรง (แนะนำ)</string>
|
<string name="direct_install">ติดตั้งโดยตรง (แนะนำ)</string>
|
||||||
@@ -185,7 +186,7 @@
|
|||||||
<string name="more_settings">More settings</string>
|
<string name="more_settings">More settings</string>
|
||||||
<string name="selinux">SELinux</string>
|
<string name="selinux">SELinux</string>
|
||||||
<string name="selinux_enabled">Enabled</string>
|
<string name="selinux_enabled">Enabled</string>
|
||||||
<string name="selinux_disabled">Disabled</string>
|
<string name="selinux_disabled">ปิดการใช้งาน</string>
|
||||||
<string name="simple_mode">Simplicity mode</string>
|
<string name="simple_mode">Simplicity mode</string>
|
||||||
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
||||||
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -225,7 +226,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -328,8 +328,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -367,4 +369,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Root yetkisi verilemedi!</string>
|
<string name="grant_root_failed">Root yetkisi verilemedi!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Aç</string>
|
<string name="open">Aç</string>
|
||||||
|
<string name="close">Kapat</string>
|
||||||
<string name="enable_web_debugging">WebView hata ayıklama etkinleştir</string>
|
<string name="enable_web_debugging">WebView hata ayıklama etkinleştir</string>
|
||||||
<string name="enable_web_debugging_summary">WebUI\'yi hata ayıklamak için kullanılabilir. Sadece ihtiyaç duyulduğunda etkinleştirin.</string>
|
<string name="enable_web_debugging_summary">WebUI\'yi hata ayıklamak için kullanılabilir. Sadece ihtiyaç duyulduğunda etkinleştirin.</string>
|
||||||
<string name="direct_install">Doğrudan yükleme (Önerilen)</string>
|
<string name="direct_install">Doğrudan yükleme (Önerilen)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">Turuncu</string>
|
<string name="color_orange">Turuncu</string>
|
||||||
<string name="color_pink">Pembe</string>
|
<string name="color_pink">Pembe</string>
|
||||||
<string name="color_gray">Gri</string>
|
<string name="color_gray">Gri</string>
|
||||||
<string name="color_ivory">Fildişi</string>
|
<string name="color_yellow">Sarı</string>
|
||||||
<string name="flash_option">Fırça Seçenekleri</string>
|
<string name="flash_option">Fırça Seçenekleri</string>
|
||||||
<string name="flash_option_tip">Yazılacak dosyayı seçin</string>
|
<string name="flash_option_tip">Yazılacak dosyayı seçin</string>
|
||||||
<string name="horizon_kernel">Anykernel3 yükle</string>
|
<string name="horizon_kernel">Anykernel3 yükle</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">yetkilendir</string>
|
<string name="batch_authorization">yetkilendir</string>
|
||||||
<string name="batch_cancel_authorization">geri al</string>
|
<string name="batch_cancel_authorization">geri al</string>
|
||||||
<string name="backup">Yedekle</string>
|
<string name="backup">Yedekle</string>
|
||||||
<string name="color_yellow">Sarı</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">Şu anda yüklü çekirdek modülü yok</string>
|
<string name="kpm_empty">Şu anda yüklü çekirdek modülü yok</string>
|
||||||
<string name="kpm_version">Sürüm</string>
|
<string name="kpm_version">Sürüm</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">Flash\'lama başarısız</string>
|
<string name="flash_failed_message">Flash\'lama başarısız</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM onarımı/yükle</string>
|
<string name="Lkm_install_methods">LKM onarımı/yükle</string>
|
||||||
<string name="GKI_install_methods">GKI/Non-GKI yükle</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Çekirdek sürümü:%1$s</string>
|
<string name="kernel_version_log">Çekirdek sürümü:%1$s</string>
|
||||||
<string name="tool_version_log">Kullanılan yama aracı:%1$s</string>
|
<string name="tool_version_log">Kullanılan yama aracı:%1$s</string>
|
||||||
<string name="configuration">Yapılandır</string>
|
<string name="configuration">Yapılandır</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">KPM İşlevini Görüntüle</string>
|
<string name="show_kpm_info">KPM İşlevini Görüntüle</string>
|
||||||
<string name="show_kpm_info_summary">Ana sayfa ve alt çubukta KPM bilgilerini ve İşlevini görüntüle (Uygulamayı yeniden açmanız gerekir)</string>
|
<string name="show_kpm_info_summary">Ana sayfa ve alt çubukta KPM bilgilerini ve İşlevini görüntüle (Uygulamayı yeniden açmanız gerekir)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">WebUI X kullan</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Daha fazla API\'yi destekleyen WebUI X kullanın</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">WebUI X\'e Eruda enjekte et</string>
|
<string name="use_webuix_eruda">WebUI X\'e Eruda enjekte et</string>
|
||||||
<string name="use_webuix_eruda_summary">WebUI X\'e bir hata ayıklama konsolu enjekte edin, böylece hata ayıklama daha kolay olur. Web hata ayıklamanın açık olması gerekir.</string>
|
<string name="use_webuix_eruda_summary">WebUI X\'e bir hata ayıklama konsolu enjekte edin, böylece hata ayıklama daha kolay olur. Web hata ayıklamanın açık olması gerekir.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -360,9 +362,10 @@
|
|||||||
<string name="select">seçenek</string>
|
<string name="select">seçenek</string>
|
||||||
<string name="profile_umount_modules_disable">Özel kaldırma modülünü devre dışı bırak</string>
|
<string name="profile_umount_modules_disable">Özel kaldırma modülünü devre dışı bırak</string>
|
||||||
<!-- Flash related -->
|
<!-- Flash related -->
|
||||||
<string name="error_code">error code</string>
|
<string name="error_code">hata kodu</string>
|
||||||
<string name="check_log">Please check the log</string>
|
<string name="check_log">Lütfen günlüğü kontrol edin</string>
|
||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Modül yükleniyor %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">Yeni bir modül yüklenemedi: %d başarısız</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Modül indirilemedi</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">Не вдалося отримати root!</string>
|
<string name="grant_root_failed">Не вдалося отримати root!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">Action</string>
|
||||||
<string name="open">Відкрити</string>
|
<string name="open">Відкрити</string>
|
||||||
|
<string name="close">Close</string>
|
||||||
<string name="enable_web_debugging">Увімкнути налагодження WebView</string>
|
<string name="enable_web_debugging">Увімкнути налагодження WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Використовується для налагодження WebUI. Будь ласка, вмикайте тільки за потреби.</string>
|
<string name="enable_web_debugging_summary">Використовується для налагодження WebUI. Будь ласка, вмикайте тільки за потреби.</string>
|
||||||
<string name="direct_install">Пряме встановлення (рекомендовано)</string>
|
<string name="direct_install">Пряме встановлення (рекомендовано)</string>
|
||||||
@@ -210,7 +211,7 @@
|
|||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">Orange</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">Pink</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">Gray</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">Yellow</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">Brush Options</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">Select the file to be flashed</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">Install Anykernel3</string>
|
||||||
@@ -225,7 +226,6 @@
|
|||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">empower</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">withdraw</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">Backup</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">No installed kernel modules at this time</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">Version</string>
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">Flash failed</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM repair/installation</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">Kernel version:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">Configure</string>
|
||||||
@@ -328,8 +328,10 @@
|
|||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">Display KPM Function</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">Select the WebUI engine to use</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">Automatic Selection</string>
|
||||||
|
<string name="engine_force_webuix">Force the use of WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Mandatory use of KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -367,4 +369,5 @@
|
|||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d Failed to install a new module</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">Module download failed</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<string name="home">Trang chủ</string>
|
<string name="home">Trang chủ</string>
|
||||||
<string name="home_not_installed">Hỗ trợ nhưng chưa cài đặt</string>
|
<string name="home_not_installed">Chưa cài đặt</string>
|
||||||
<string name="home_click_to_install">Bấm để cài đặt</string>
|
<string name="home_click_to_install">Nhấn để cài đặt</string>
|
||||||
<string name="home_working">Đang hoạt động</string>
|
<string name="home_working">Đang hoạt động</string>
|
||||||
<string name="home_working_version">Phiên bản: %d</string>
|
<string name="home_working_version">Phiên bản: %d</string>
|
||||||
<string name="home_superuser_count">Ứng dụng đã cấp quyền Root: %d</string>
|
<string name="home_superuser_count">Superusers: %d</string>
|
||||||
<string name="home_module_count">Module: %d</string>
|
<string name="home_module_count">Modules: %d</string>
|
||||||
<string name="home_unsupported">Không được hỗ trợ</string>
|
<string name="home_unsupported">Không được hỗ trợ</string>
|
||||||
<string name="home_unsupported_reason">Không phát hiện được trình điều khiển SukiSU Ultra trên Kernel của bạn, Kernel sai?</string>
|
<string name="home_unsupported_reason">Không phát hiện được trình điều khiển SukiSU Ultra trên Kernel của bạn, Kernel sai?</string>
|
||||||
<string name="home_kernel">Phiên bản Kernel</string>
|
<string name="home_kernel">Phiên bản Kernel</string>
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
<string name="superuser">Superuser</string>
|
<string name="superuser">Superuser</string>
|
||||||
<string name="module_failed_to_enable">Không thể kích hoạt module: %s</string>
|
<string name="module_failed_to_enable">Không thể kích hoạt module: %s</string>
|
||||||
<string name="module_failed_to_disable">Không thể vô hiệu hoá module: %s</string>
|
<string name="module_failed_to_disable">Không thể vô hiệu hoá module: %s</string>
|
||||||
<string name="module_empty">Chưa cài module nào</string>
|
<string name="module_empty">Chưa cài đặt module nào</string>
|
||||||
<string name="module">Module</string>
|
<string name="module">Module</string>
|
||||||
<string name="module_sort_action_first">Sắp xếp (Theo hành động)</string>
|
<string name="module_sort_action_first">Sắp xếp (Theo hành động)</string>
|
||||||
<string name="module_sort_enabled_first">Sắp xếp (Theo trạng thái)</string>
|
<string name="module_sort_enabled_first">Sắp xếp (Theo trạng thái)</string>
|
||||||
@@ -68,30 +68,30 @@
|
|||||||
<string name="profile_groups">Nhóm</string>
|
<string name="profile_groups">Nhóm</string>
|
||||||
<string name="profile_capabilities">Tính tương thích</string>
|
<string name="profile_capabilities">Tính tương thích</string>
|
||||||
<string name="profile_selinux_context">Bối cảnh SELinux</string>
|
<string name="profile_selinux_context">Bối cảnh SELinux</string>
|
||||||
<string name="profile_umount_modules">Bỏ gắn kết các Module</string>
|
<string name="profile_umount_modules">Bỏ gắn kết các module</string>
|
||||||
<string name="failed_to_update_app_profile">Cập nhật hồ sơ ứng dụng thất bại cho %s</string>
|
<string name="failed_to_update_app_profile">Cập nhật Hồ sơ ứng dụng cho %s thất bại</string>
|
||||||
<string name="require_kernel_version" formatted="false">Phiên bản SukiSU Ultra hiện tại %d quá thấp để trình quản lý hoạt động bình thường. Vui lòng cập nhật lên phiên bản %d hoặc cao hơn!</string>
|
<string name="require_kernel_version" formatted="false">Phiên bản SukiSU Ultra hiện tại %d quá thấp để trình quản lý hoạt động bình thường. Vui lòng cập nhật lên phiên bản %d hoặc cao hơn!</string>
|
||||||
<string name="settings_umount_modules_default">Bỏ gắn kết các Module cho toàn hệ thống</string>
|
<string name="settings_umount_modules_default">Bỏ gắn kết các module cho toàn hệ thống</string>
|
||||||
<string name="settings_umount_modules_default_summary">Giá trị mặc định chung cho \"Bỏ gắn kết các Module\" trong Hồ sơ ứng dụng. Nếu được bật, mọi thay đổi hệ thống do các Module gây ra sẽ bị gỡ bỏ khỏi hệ thống và các ứng dụng chưa thiết lập hồ sơ</string>
|
<string name="settings_umount_modules_default_summary">Giá trị mặc định chung cho \"Bỏ gắn kết các module\" trong Hồ sơ ứng dụng. Nếu được bật, mọi thay đổi hệ thống do các module gây ra sẽ bị gỡ bỏ khỏi hệ thống và các ứng dụng chưa thiết lập hồ sơ</string>
|
||||||
<string name="settings_susfs_toggle">Ẩn hooks kprobe</string>
|
<string name="settings_susfs_toggle">Ẩn hooks kprobe</string>
|
||||||
<string name="profile_umount_modules_summary">Bật tùy chọn này sẽ cho phép SukiSU Ultra khôi phục mọi tệp đã được các Module sửa đổi cho ứng dụng này</string>
|
<string name="profile_umount_modules_summary">Bật tùy chọn này sẽ cho phép SukiSU Ultra khôi phục mọi file đã được các module sửa đổi trong ứng dụng này</string>
|
||||||
<string name="profile_selinux_domain">Tên miền</string>
|
<string name="profile_selinux_domain">Tên miền</string>
|
||||||
<string name="profile_selinux_rules">Quy tắc</string>
|
<string name="profile_selinux_rules">Quy tắc</string>
|
||||||
<string name="module_update">Cập nhật</string>
|
<string name="module_update">Cập nhật</string>
|
||||||
<string name="module_downloading">Tải xuống module: %s</string>
|
<string name="module_downloading">Tải xuống module: %s</string>
|
||||||
<string name="module_start_downloading">Đang tải xuống module: %s</string>
|
<string name="module_start_downloading">Đang tải xuống module: %s</string>
|
||||||
<string name="new_version_available">Phiên bản mới %s đã có sẵn, hãy nhấp để cập nhật</string>
|
<string name="new_version_available">Phiên bản mới %s đã có sẵn, nhấn để cập nhật</string>
|
||||||
<string name="launch_app">Mở</string>
|
<string name="launch_app">Mở</string>
|
||||||
<string name="force_stop_app" formatted="false">Buộc dừng</string>
|
<string name="force_stop_app" formatted="false">Buộc dừng</string>
|
||||||
<string name="restart_app">Khởi động lại</string>
|
<string name="restart_app">Khởi động lại</string>
|
||||||
<string name="failed_to_update_sepolicy">Không cập nhật được quy tắc SELinux cho %s</string>
|
<string name="failed_to_update_sepolicy">Cập nhật quy tắc SELinux cho %s thất bại</string>
|
||||||
<string name="module_changelog">Changelog</string>
|
<string name="module_changelog">Changelog</string>
|
||||||
<string name="settings_profile_template">Mẫu hồ sơ ứng dụng</string>
|
<string name="settings_profile_template">Mẫu Hồ sơ ứng dụng</string>
|
||||||
<string name="settings_profile_template_summary">Quản lý mẫu cục bộ và trực tuyến của Hồ sơ ứng dụng</string>
|
<string name="settings_profile_template_summary">Quản lý mẫu cục bộ và trực tuyến của Hồ sơ ứng dụng</string>
|
||||||
<string name="app_profile_template_create">Tạo mẫu</string>
|
<string name="app_profile_template_create">Tạo mẫu</string>
|
||||||
<string name="app_profile_template_edit">Chỉnh sửa mẫu</string>
|
<string name="app_profile_template_edit">Chỉnh sửa mẫu</string>
|
||||||
<string name="app_profile_template_id">ID</string>
|
<string name="app_profile_template_id">ID</string>
|
||||||
<string name="app_profile_template_id_invalid">ID mẫu không hợp lệ/tồn tại</string>
|
<string name="app_profile_template_id_invalid">ID mẫu không hợp lệ</string>
|
||||||
<string name="app_profile_template_name">Tên</string>
|
<string name="app_profile_template_name">Tên</string>
|
||||||
<string name="app_profile_template_description">Miêu tả</string>
|
<string name="app_profile_template_description">Miêu tả</string>
|
||||||
<string name="app_profile_template_save">Lưu</string>
|
<string name="app_profile_template_save">Lưu</string>
|
||||||
@@ -102,10 +102,10 @@
|
|||||||
<string name="app_profile_import_export">Nhập/Xuất</string>
|
<string name="app_profile_import_export">Nhập/Xuất</string>
|
||||||
<string name="app_profile_import_from_clipboard">Nhập từ bộ nhớ tạm clipboard</string>
|
<string name="app_profile_import_from_clipboard">Nhập từ bộ nhớ tạm clipboard</string>
|
||||||
<string name="app_profile_export_to_clipboard">Xuất vào bộ nhớ tạm clipboard</string>
|
<string name="app_profile_export_to_clipboard">Xuất vào bộ nhớ tạm clipboard</string>
|
||||||
<string name="app_profile_template_export_empty">Không tìm thấy hồ sơ nội bộ để xuất!</string>
|
<string name="app_profile_template_export_empty">Không tìm thấy mẫu cục bộ để xuất!</string>
|
||||||
<string name="app_profile_template_import_success">Nhập thành công</string>
|
<string name="app_profile_template_import_success">Nhập thành công</string>
|
||||||
<string name="app_profile_template_sync">Đồng bộ với hồ sơ ứng dụng trực tuyến</string>
|
<string name="app_profile_template_sync">Đồng bộ hoá các mẫu trực tuyến</string>
|
||||||
<string name="app_profile_template_save_failed">Lưu hồ sơ ứng dụng thất bại</string>
|
<string name="app_profile_template_save_failed">Lưu mẫu thất bại</string>
|
||||||
<string name="app_profile_template_import_empty">Bộ nhớ tạm đang trống!</string>
|
<string name="app_profile_template_import_empty">Bộ nhớ tạm đang trống!</string>
|
||||||
<string name="module_changelog_failed">Lấy changelog thất bại: %s</string>
|
<string name="module_changelog_failed">Lấy changelog thất bại: %s</string>
|
||||||
<string name="settings_check_update">Kiểm tra cập nhật</string>
|
<string name="settings_check_update">Kiểm tra cập nhật</string>
|
||||||
@@ -113,10 +113,11 @@
|
|||||||
<string name="grant_root_failed">Cấp quyền root thất bại!</string>
|
<string name="grant_root_failed">Cấp quyền root thất bại!</string>
|
||||||
<string name="action">Khởi chạy</string>
|
<string name="action">Khởi chạy</string>
|
||||||
<string name="open">Mở</string>
|
<string name="open">Mở</string>
|
||||||
|
<string name="close">Đóng</string>
|
||||||
<string name="enable_web_debugging">Gỡ lỗi WebView</string>
|
<string name="enable_web_debugging">Gỡ lỗi WebView</string>
|
||||||
<string name="enable_web_debugging_summary">Có thể sử dụng để gỡ lỗi WebUI. Vui lòng chỉ bật khi cần thiết</string>
|
<string name="enable_web_debugging_summary">Có thể sử dụng để gỡ lỗi WebUI. Vui lòng chỉ bật khi cần thiết</string>
|
||||||
<string name="direct_install">Cài đặt trực tiếp (Khuyến nghị)</string>
|
<string name="direct_install">Cài đặt trực tiếp (Khuyến nghị)</string>
|
||||||
<string name="select_file">Chọn tệp .img cần vá</string>
|
<string name="select_file">Chọn file .img cần vá</string>
|
||||||
<string name="install_inactive_slot">Cài đặt vào phân vùng chưa được sử dụng (Sau OTA)</string>
|
<string name="install_inactive_slot">Cài đặt vào phân vùng chưa được sử dụng (Sau OTA)</string>
|
||||||
<string name="install_inactive_slot_warning">Thiết bị của bạn sẽ **BUỘC** phải khởi động vào phân vùng chưa được sử dụng!\nChỉ sử dụng tùy chọn này sau khi OTA hoàn tất.\nTiếp tục?</string>
|
<string name="install_inactive_slot_warning">Thiết bị của bạn sẽ **BUỘC** phải khởi động vào phân vùng chưa được sử dụng!\nChỉ sử dụng tùy chọn này sau khi OTA hoàn tất.\nTiếp tục?</string>
|
||||||
<string name="install_next">Kế tiếp</string>
|
<string name="install_next">Kế tiếp</string>
|
||||||
@@ -128,11 +129,11 @@
|
|||||||
<string name="settings_restore_stock_image">Khôi phục phân vùng khởi động về mặc định</string>
|
<string name="settings_restore_stock_image">Khôi phục phân vùng khởi động về mặc định</string>
|
||||||
<string name="settings_uninstall_temporary_message">Gỡ cài đặt tạm thời SukiSU Ultra, khôi phục lại trạng thái ban đầu sau lần khởi động lại tiếp theo</string>
|
<string name="settings_uninstall_temporary_message">Gỡ cài đặt tạm thời SukiSU Ultra, khôi phục lại trạng thái ban đầu sau lần khởi động lại tiếp theo</string>
|
||||||
<string name="settings_uninstall_permanent_message">Gỡ cài đặt SukiSU Ultra (Root và tất cả các module) sạch hoàn toàn, trả về trạng thái ban đầu</string>
|
<string name="settings_uninstall_permanent_message">Gỡ cài đặt SukiSU Ultra (Root và tất cả các module) sạch hoàn toàn, trả về trạng thái ban đầu</string>
|
||||||
<string name="settings_restore_stock_image_message">Khôi phục lại boot lúc đầu (Nếu có bản sao lưu), thường được sử dụng trước OTA; nếu bạn cần gỡ hẳn SukiSU Ultra, sử dụng\"Gỡ cài đặt sạch\"</string>
|
<string name="settings_restore_stock_image_message">Khôi phục lại boot lúc đầu (Nếu có bản sao lưu), thường được sử dụng trước OTA; nếu bạn cần gỡ hẳn SukiSU Ultra, sử dụng \"Gỡ cài đặt sạch\"</string>
|
||||||
<string name="flashing">Đang flash...</string>
|
<string name="flashing">Đang Flash...</string>
|
||||||
<string name="flash_success">Flash thành công</string>
|
<string name="flash_success">Flash thành công</string>
|
||||||
<string name="flash_failed">Flash thất bại</string>
|
<string name="flash_failed">Flash thất bại</string>
|
||||||
<string name="selected_lkm">Chọn tệp LKM: %s</string>
|
<string name="selected_lkm">Đã chọn LKM: %s</string>
|
||||||
<string name="save_log">Lưu logs</string>
|
<string name="save_log">Lưu logs</string>
|
||||||
<string name="log_saved">Logs đã được lưu</string>
|
<string name="log_saved">Logs đã được lưu</string>
|
||||||
<string name="status_supported">Được hỗ trợ</string>
|
<string name="status_supported">Được hỗ trợ</string>
|
||||||
@@ -140,20 +141,20 @@
|
|||||||
<string name="status_unknown">Không rõ</string>
|
<string name="status_unknown">Không rõ</string>
|
||||||
<string name="sus_su_mode">Chế độ SU của SuS:</string>
|
<string name="sus_su_mode">Chế độ SU của SuS:</string>
|
||||||
<!-- Module related -->
|
<!-- Module related -->
|
||||||
<string name="module_install_confirm">Xác nhận cài đặt Module %1$s?</string>
|
<string name="module_install_confirm">Xác nhận cài đặt module %1$s?</string>
|
||||||
<string name="unknown_module">Module không xác định</string>
|
<string name="unknown_module">Module không xác định</string>
|
||||||
<!-- Restore related -->
|
<!-- Restore related -->
|
||||||
<string name="restore_confirm_title">Xác nhận khôi phục Module</string>
|
<string name="restore_confirm_title">Xác Nhận Khôi Phục Module</string>
|
||||||
<string name="restore_confirm_message">Hành động này sẽ ghi đè lên tất cả các Module hiện có. Tiếp tục?</string>
|
<string name="restore_confirm_message">Hành động này sẽ ghi đè lên tất cả các module hiện có. Tiếp tục?</string>
|
||||||
<string name="confirm">Xác nhận</string>
|
<string name="confirm">Xác nhận</string>
|
||||||
<string name="cancel">Huỷ bỏ</string>
|
<string name="cancel">Huỷ bỏ</string>
|
||||||
<!-- Backup related -->
|
<!-- Backup related -->
|
||||||
<string name="backup_success">Sao lưu thành công (tar.gz)</string>
|
<string name="backup_success">Sao lưu thành công (tar.gz)</string>
|
||||||
<string name="backup_failed">Sao lưu thất bại: %1$s</string>
|
<string name="backup_failed">Sao lưu thất bại: %1$s</string>
|
||||||
<string name="backup_modules">Sao lưu các Module</string>
|
<string name="backup_modules">Sao lưu các module</string>
|
||||||
<string name="restore_modules">Khôi phục các Module</string>
|
<string name="restore_modules">Khôi phục các module</string>
|
||||||
<!-- Restore related messages -->
|
<!-- Restore related messages -->
|
||||||
<string name="restore_success">Các Module đã được khôi phục thành công, cần khởi động lại</string>
|
<string name="restore_success">Các module đã được khôi phục thành công, cần khởi động lại</string>
|
||||||
<string name="restore_failed">Khôi phục thất bại: %1$s</string>
|
<string name="restore_failed">Khôi phục thất bại: %1$s</string>
|
||||||
<string name="restart_now">Khởi động lại ngay</string>
|
<string name="restart_now">Khởi động lại ngay</string>
|
||||||
<string name="unknown_error">Lỗi không xác định</string>
|
<string name="unknown_error">Lỗi không xác định</string>
|
||||||
@@ -174,11 +175,11 @@
|
|||||||
<string name="settings_restore_default">Khôi phục mặc định</string>
|
<string name="settings_restore_default">Khôi phục mặc định</string>
|
||||||
<string name="home_android_version">Phiên bản Android</string>
|
<string name="home_android_version">Phiên bản Android</string>
|
||||||
<string name="home_device_model">Model thiết bị</string>
|
<string name="home_device_model">Model thiết bị</string>
|
||||||
<string name="su_not_allowed">Cấp quyền SU không được phép cho: %s</string>
|
<string name="su_not_allowed">Quyền SU cho %s chưa được cấp</string>
|
||||||
<string name="settings_disable_su">Vô hiệu hoá khả năng của lệnh SU</string>
|
<string name="settings_disable_su">Vô hiệu hoá khả năng của lệnh SU</string>
|
||||||
<string name="settings_disable_su_summary">Vô hiệu hoá khả năng thực thi lệnh SU để lấy quyền root (Những app đã cấp trước đó không bị ảnh hưởng)</string>
|
<string name="settings_disable_su_summary">Vô hiệu hoá khả năng thực thi lệnh SU để lấy quyền root (Những app đã cấp trước đó không bị ảnh hưởng)</string>
|
||||||
<string name="using_mksu_manager">Bạn đang sử dụng trình quản lý SukiSU Beta</string>
|
<string name="using_mksu_manager">Bạn đang sử dụng trình quản lý SukiSU Beta</string>
|
||||||
<string name="module_install_multiple_confirm">Bạn có chắc muốn cài đặt các Module %d đã chọn không?</string>
|
<string name="module_install_multiple_confirm">Bạn có chắc muốn cài đặt các module %d đã chọn không?</string>
|
||||||
<string name="module_install_multiple_confirm_with_names">Bạn có chắc muốn cài đặt các module %1$d sau không? \n\n%2$s</string>
|
<string name="module_install_multiple_confirm_with_names">Bạn có chắc muốn cài đặt các module %1$d sau không? \n\n%2$s</string>
|
||||||
<string name="more_settings">Nhiều cài đặt hơn</string>
|
<string name="more_settings">Nhiều cài đặt hơn</string>
|
||||||
<string name="selinux">SELinux</string>
|
<string name="selinux">SELinux</string>
|
||||||
@@ -189,7 +190,7 @@
|
|||||||
<string name="hide_kernel_kernelsu_version">Ẩn phiên bản kernel</string>
|
<string name="hide_kernel_kernelsu_version">Ẩn phiên bản kernel</string>
|
||||||
<string name="hide_kernel_kernelsu_version_summary">Ẩn thông tin phiên bản kernel ở trang chủ</string>
|
<string name="hide_kernel_kernelsu_version_summary">Ẩn thông tin phiên bản kernel ở trang chủ</string>
|
||||||
<string name="hide_other_info">Ẩn thông tin khác</string>
|
<string name="hide_other_info">Ẩn thông tin khác</string>
|
||||||
<string name="hide_other_info_summary">Ẩn thông tin về số lượng ứng dụng đã được cấp quyền root, các module và các module KPM ở trang chủ</string>
|
<string name="hide_other_info_summary">Ẩn thông tin về số lượng ứng dụng đã được cấp quyền root, các module và các kpmodule ở trang chủ</string>
|
||||||
<string name="hide_susfs_status">Ẩn trạng thái SuSFS</string>
|
<string name="hide_susfs_status">Ẩn trạng thái SuSFS</string>
|
||||||
<string name="hide_susfs_status_summary">Ẩn thông tin trạng thái SuSFS ở trang chủ</string>
|
<string name="hide_susfs_status_summary">Ẩn thông tin trạng thái SuSFS ở trang chủ</string>
|
||||||
<string name="hide_link_card">Ẩn trạng thái thẻ liên kết</string>
|
<string name="hide_link_card">Ẩn trạng thái thẻ liên kết</string>
|
||||||
@@ -200,7 +201,7 @@
|
|||||||
<string name="theme_dark">Tối</string>
|
<string name="theme_dark">Tối</string>
|
||||||
<string name="manual_hook">Móc thủ công</string>
|
<string name="manual_hook">Móc thủ công</string>
|
||||||
<string name="dynamic_color_title">Màu sắc động</string>
|
<string name="dynamic_color_title">Màu sắc động</string>
|
||||||
<string name="dynamic_color_summary">Màu sắc động sử dụng chủ đề hệ thống</string>
|
<string name="dynamic_color_summary">Sử dụng màu sắc động làm chủ đề hệ thống</string>
|
||||||
<string name="choose_theme_color">Chọn màu chủ đề</string>
|
<string name="choose_theme_color">Chọn màu chủ đề</string>
|
||||||
<string name="color_default">Xanh dương</string>
|
<string name="color_default">Xanh dương</string>
|
||||||
<string name="color_green">Xanh lá</string>
|
<string name="color_green">Xanh lá</string>
|
||||||
@@ -208,13 +209,13 @@
|
|||||||
<string name="color_orange">Cam</string>
|
<string name="color_orange">Cam</string>
|
||||||
<string name="color_pink">Hồng</string>
|
<string name="color_pink">Hồng</string>
|
||||||
<string name="color_gray">Xám</string>
|
<string name="color_gray">Xám</string>
|
||||||
<string name="color_ivory">Trắng ngà</string>
|
<string name="color_yellow">Vàng</string>
|
||||||
<string name="flash_option">Tuỳ chọn Flash</string>
|
<string name="flash_option">Tuỳ chọn Flash</string>
|
||||||
<string name="flash_option_tip">Chọn tập tin cần Flash</string>
|
<string name="flash_option_tip">Chọn file cần Flash</string>
|
||||||
<string name="horizon_kernel">Tệp Anykernel3</string>
|
<string name="horizon_kernel">Cài đặt Anykernel3</string>
|
||||||
<string name="horizon_kernel_summary">Flash tệp Kernel AnyKernel3</string>
|
<string name="horizon_kernel_summary">Flash file AnyKernel3</string>
|
||||||
<string name="root_required">Yêu cầu quyền root</string>
|
<string name="root_required">Yêu cầu quyền root</string>
|
||||||
<string name="copy_failed">Sao chép tập tin thất bại</string>
|
<string name="copy_failed">Sao chép file thất bại</string>
|
||||||
<string name="reboot_complete_title">Khởi động lại để hoàn tất</string>
|
<string name="reboot_complete_title">Khởi động lại để hoàn tất</string>
|
||||||
<string name="reboot_complete_msg">Khởi động lại ngay lập tức?</string>
|
<string name="reboot_complete_msg">Khởi động lại ngay lập tức?</string>
|
||||||
<string name="yes">Có</string>
|
<string name="yes">Có</string>
|
||||||
@@ -223,8 +224,7 @@
|
|||||||
<string name="batch_authorization">Uỷ quyền</string>
|
<string name="batch_authorization">Uỷ quyền</string>
|
||||||
<string name="batch_cancel_authorization">Hủy ủy quyền hàng loạt</string>
|
<string name="batch_cancel_authorization">Hủy ủy quyền hàng loạt</string>
|
||||||
<string name="backup">Sao lưu</string>
|
<string name="backup">Sao lưu</string>
|
||||||
<string name="color_yellow">Vàng</string>
|
<string name="kpm_title">KPModule</string>
|
||||||
<string name="kpm_title">KPM</string>
|
|
||||||
<string name="kpm_empty">Không có Kernel Module nào được cài đặt tại thời điểm này</string>
|
<string name="kpm_empty">Không có Kernel Module nào được cài đặt tại thời điểm này</string>
|
||||||
<string name="kpm_version">Phiên bản</string>
|
<string name="kpm_version">Phiên bản</string>
|
||||||
<string name="kpm_author">Tác giả</string>
|
<string name="kpm_author">Tác giả</string>
|
||||||
@@ -232,35 +232,35 @@
|
|||||||
<string name="kpm_uninstall_success">Gỡ cài đặt thành công</string>
|
<string name="kpm_uninstall_success">Gỡ cài đặt thành công</string>
|
||||||
<string name="kpm_uninstall_failed">Gỡ cài đặt thất bại</string>
|
<string name="kpm_uninstall_failed">Gỡ cài đặt thất bại</string>
|
||||||
<string name="kpm_install">Cài đặt</string>
|
<string name="kpm_install">Cài đặt</string>
|
||||||
<string name="kpm_install_success">Tải Module KPM thành công</string>
|
<string name="kpm_install_success">Load kpmodule thành công</string>
|
||||||
<string name="kpm_install_failed">Tải Module KPM thất bại</string>
|
<string name="kpm_install_failed">Load kpmodule thất bại</string>
|
||||||
<string name="kpm_args">Thông số KPM</string>
|
<string name="kpm_args">Thông số</string>
|
||||||
<string name="kpm_control">Tuỳ chỉnh</string>
|
<string name="kpm_control">Tuỳ chỉnh</string>
|
||||||
<string name="home_kpm_version">Phiên bản KPM</string>
|
<string name="home_kpm_version">Phiên bản KPM</string>
|
||||||
<string name="close_notice">Đóng</string>
|
<string name="close_notice">Đóng</string>
|
||||||
<string name="kernel_module_notice">Các chức năng Module Kernel sau đây được KernelPatch phát triển và sửa đổi để tương thích với các chức năng Module Kernel của SukiSU Ultra</string>
|
<string name="kernel_module_notice">Các chức năng Kernel Module sau đây được KernelPatch phát triển và sửa đổi để tương thích với các chức năng Kernel Module của SukiSU Ultra</string>
|
||||||
<string name="home_ContributionCard_kernelsu">SukiSU Ultra mong đợi</string>
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra mong đợi</string>
|
||||||
<string name="kpm_control_success">Thành công</string>
|
<string name="kpm_control_success">Thành công</string>
|
||||||
<string name="kpm_control_failed">Thất bại</string>
|
<string name="kpm_control_failed">Thất bại</string>
|
||||||
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra sẽ là một nhánh tương đối độc lập của KSU trong tương lai, nhưng chúng tôi xin cảm ơn KernelSU và MKSU,... vì những đóng góp của họ!</string>
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra sẽ là một nhánh tương đối độc lập của KSU trong tương lai, nhưng chúng tôi xin cảm ơn KernelSU và MKSU,... vì những đóng góp của họ!</string>
|
||||||
<string name="not_supported">Không được hỗ trợ</string>
|
<string name="not_supported">Không được hỗ trợ</string>
|
||||||
<string name="supported">Được hỗ trợ</string>
|
<string name="supported">Được hỗ trợ</string>
|
||||||
<string name="home_kpm_module">"Module KPM: %d"</string>
|
<string name="home_kpm_module">"KPModules: %d"</string>
|
||||||
<string name="kpm_invalid_file">Tệp KPM không hợp lệ</string>
|
<string name="kpm_invalid_file">File KPM không hợp lệ</string>
|
||||||
<string name="kernel_patched">Kernel chưa được vá</string>
|
<string name="kernel_patched">Kernel chưa được vá</string>
|
||||||
<string name="kernel_not_enabled">Kernel chưa được cấu hình</string>
|
<string name="kernel_not_enabled">Kernel chưa được cấu hình</string>
|
||||||
<string name="custom_settings">Cài đặt giản lược</string>
|
<string name="custom_settings">Cài đặt giản lược</string>
|
||||||
<string name="kpm_install_mode">Cài đặt KPM</string>
|
<string name="kpm_install_mode">Cài đặt KPM</string>
|
||||||
<string name="kpm_install_mode_load">Tải</string>
|
<string name="kpm_install_mode_load">Tải</string>
|
||||||
<string name="kpm_install_mode_embed">Nhúng</string>
|
<string name="kpm_install_mode_embed">Nhúng</string>
|
||||||
<string name="kpm_install_mode_description">Vui lòng:%1\$s chọn chế độ cài đặt Module \n\nTải: Tải tạm thời Module \nNhúng: Cài đặt vĩnh viễn vào hệ thống</string>
|
<string name="kpm_install_mode_description">Vui lòng chọn: %1\$s Chế Độ Cài Đặt Module \n\nTải: Tải tạm thời module \nNhúng: Cài đặt vĩnh viễn vào hệ thống</string>
|
||||||
<string name="log_failed_to_check_module_file">Kiểm tra tệp Module thất bại</string>
|
<string name="log_failed_to_check_module_file">Kiểm tra file module thất bại</string>
|
||||||
<string name="snackbar_failed_to_check_module_file">Không thể kiểm tra tệp Module</string>
|
<string name="snackbar_failed_to_check_module_file">Không thể kiểm tra file module</string>
|
||||||
<string name="confirm_uninstall_title">Xác nhận gỡ cài đặt</string>
|
<string name="confirm_uninstall_title">Xác nhận gỡ cài đặt</string>
|
||||||
<string name="confirm_uninstall_confirm">Gỡ cài đặt</string>
|
<string name="confirm_uninstall_confirm">Gỡ cài đặt</string>
|
||||||
<string name="confirm_uninstall_dismiss">Hủy bỏ</string>
|
<string name="confirm_uninstall_dismiss">Hủy bỏ</string>
|
||||||
<string name="theme_color">Màu chủ đề</string>
|
<string name="theme_color">Màu chủ đề</string>
|
||||||
<string name="invalid_file_type">Loại tệp không đúng! Vui lòng chọn tệp .kpm</string>
|
<string name="invalid_file_type">Loại file không đúng! Vui lòng chọn file .kpm</string>
|
||||||
<string name="confirm_uninstall_title_with_filename">Gỡ cài đặt</string>
|
<string name="confirm_uninstall_title_with_filename">Gỡ cài đặt</string>
|
||||||
<string name="confirm_uninstall_content">KPM sau đây sẽ được gỡ cài đặt: %s</string>
|
<string name="confirm_uninstall_content">KPM sau đây sẽ được gỡ cài đặt: %s</string>
|
||||||
<string name="settings_susfs_toggle_summary">Vô hiệu hóa các hook kprobe được tạo bởi SukiSU Ultra, thay vào đó sử dụng các hook nội tuyến, tương tự như phương pháp hook kernel không phải GKI</string>
|
<string name="settings_susfs_toggle_summary">Vô hiệu hóa các hook kprobe được tạo bởi SukiSU Ultra, thay vào đó sử dụng các hook nội tuyến, tương tự như phương pháp hook kernel không phải GKI</string>
|
||||||
@@ -271,34 +271,34 @@
|
|||||||
<!-- Kernel Flash Progress Related -->
|
<!-- Kernel Flash Progress Related -->
|
||||||
<string name="horizon_flash_title">Kernel Flashing</string>
|
<string name="horizon_flash_title">Kernel Flashing</string>
|
||||||
<string name="horizon_logs_label">Logs:</string>
|
<string name="horizon_logs_label">Logs:</string>
|
||||||
<string name="horizon_flash_complete">Flash Complete</string>
|
<string name="horizon_flash_complete">Flash hoàn tất</string>
|
||||||
<!-- Flash Status Related -->
|
<!-- Flash Status Related -->
|
||||||
<string name="horizon_preparing">Preparing…</string>
|
<string name="horizon_preparing">Chuẩn bị…</string>
|
||||||
<string name="horizon_cleaning_files">Cleaning files…</string>
|
<string name="horizon_cleaning_files">Đang dọn dẹp các file…</string>
|
||||||
<string name="horizon_copying_files">Copying files…</string>
|
<string name="horizon_copying_files">Đang sao chép các file…</string>
|
||||||
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
<string name="horizon_extracting_tool">Đang giải nén công cụ Flash…</string>
|
||||||
<string name="horizon_patching_script">Patching flash script…</string>
|
<string name="horizon_patching_script">Đang vá tập lệnh Flash…</string>
|
||||||
<string name="horizon_flashing">Flashing kernel…</string>
|
<string name="horizon_flashing">Flashing Kernel…</string>
|
||||||
<string name="horizon_flash_complete_status">Flash completed</string>
|
<string name="horizon_flash_complete_status">Flash hoàn tất</string>
|
||||||
<!-- Slot selection related strings -->
|
<!-- Slot selection related strings -->
|
||||||
<string name="select_slot_title">Chọn Slot Flash</string>
|
<string name="select_slot_title">Chọn Slot Flash</string>
|
||||||
<string name="select_slot_description">Vui lòng chọn Slot để Flash Boot</string>
|
<string name="select_slot_description">Vui lòng chọn Slot để Flash Boot</string>
|
||||||
<string name="slot_a">Slot A</string>
|
<string name="slot_a">Slot A</string>
|
||||||
<string name="slot_b">Slot B</string>
|
<string name="slot_b">Slot B</string>
|
||||||
<string name="selected_slot">Chọn Slot: %1$s</string>
|
<string name="selected_slot">Đã chọn Slot: %1$s</string>
|
||||||
<string name="horizon_getting_original_slot">Lấy Slot ban đầu</string>
|
<string name="horizon_getting_original_slot">Lấy Slot ban đầu</string>
|
||||||
<string name="horizon_setting_target_slot">Cài đặt Slot được chỉ định</string>
|
<string name="horizon_setting_target_slot">Cài đặt Slot được chỉ định</string>
|
||||||
<string name="horizon_restoring_original_slot">Khôi phục Slot mặc định</string>
|
<string name="horizon_restoring_original_slot">Khôi phục Slot mặc định</string>
|
||||||
<string name="current_slot">Slot hiện tại:%1$s </string>
|
<string name="current_slot">Slot hiện tại: %1$s </string>
|
||||||
<!-- Error Messages -->
|
<!-- Error Messages -->
|
||||||
<string name="horizon_copy_failed">Copy thất bại</string>
|
<string name="horizon_copy_failed">Copy thất bại</string>
|
||||||
<string name="horizon_unknown_error">Lỗi không xác định</string>
|
<string name="horizon_unknown_error">Lỗi không xác định</string>
|
||||||
<string name="flash_failed_message">Flash thất bại</string>
|
<string name="flash_failed_message">Flash thất bại</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM cài đặt</string>
|
<string name="Lkm_install_methods">LKM cài đặt</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI cài đặt</string>
|
<string name="GKI_install_methods">Flashing AnyKernel3</string>
|
||||||
<string name="kernel_version_log">Phiên bản Kernel:%1$s</string>
|
<string name="kernel_version_log">Phiên bản Kernel: %1$s</string>
|
||||||
<string name="tool_version_log">Sử dụng công cụ vá lỗi:%1$s</string>
|
<string name="tool_version_log">Sử dụng công cụ vá lỗi: %1$s</string>
|
||||||
<string name="configuration">Cấu hình</string>
|
<string name="configuration">Cấu hình</string>
|
||||||
<string name="app_settings">Cài đặt ứng dụng</string>
|
<string name="app_settings">Cài đặt ứng dụng</string>
|
||||||
<string name="tools">Công cụ</string>
|
<string name="tools">Công cụ</string>
|
||||||
@@ -326,14 +326,16 @@
|
|||||||
<string name="show_kpm_info">Hiển thị chức năng KPM</string>
|
<string name="show_kpm_info">Hiển thị chức năng KPM</string>
|
||||||
<string name="show_kpm_info_summary">Hiển thị thông tin KPM, chức năng ở trang chủ và thanh dưới cùng (Cần khởi động lại ứng dụng)</string>
|
<string name="show_kpm_info_summary">Hiển thị thông tin KPM, chức năng ở trang chủ và thanh dưới cùng (Cần khởi động lại ứng dụng)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Sử dụng WebUI X</string>
|
<string name="use_webuix">Chọn công cụ WebUI để sử dụng</string>
|
||||||
<string name="use_webuix_summary">Sử dụng WebUI X thay cho WebUI vì hỗ trợ nhiều API hơn</string>
|
<string name="engine_auto_select">Tự động chọn</string>
|
||||||
|
<string name="engine_force_webuix">Sử dụng WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">Sử dụng KSU WebUI</string>
|
||||||
<string name="use_webuix_eruda">Tiêm Eruda vào WebUI X</string>
|
<string name="use_webuix_eruda">Tiêm Eruda vào WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Chèn bảng điều khiển gỡ lỗi vào WebUI X để gỡ lỗi dễ dàng hơn. Yêu cầu bật gỡ lỗi web</string>
|
<string name="use_webuix_eruda_summary">Chèn bảng điều khiển gỡ lỗi vào WebUI X để gỡ lỗi dễ dàng hơn. Yêu cầu bật gỡ lỗi web</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
<string name="dpi_settings">Cài đặt DPI</string>
|
<string name="dpi_settings">Cài đặt DPI</string>
|
||||||
<string name="app_dpi_title">Tuỳ chỉnh DPI</string>
|
<string name="app_dpi_title">Tuỳ chỉnh DPI</string>
|
||||||
<string name="app_dpi_summary">Điều chỉnh DPI hiển thị cho ứng dụng</string>
|
<string name="app_dpi_summary">Điều chỉnh DPI hiển thị</string>
|
||||||
<string name="dpi_size_small">Nhỏ</string>
|
<string name="dpi_size_small">Nhỏ</string>
|
||||||
<string name="dpi_size_medium">Vừa</string>
|
<string name="dpi_size_medium">Vừa</string>
|
||||||
<string name="dpi_size_large">Lớn</string>
|
<string name="dpi_size_large">Lớn</string>
|
||||||
@@ -346,7 +348,7 @@
|
|||||||
<string name="dpi_applied_success">DPI đã được đặt thành %1$d, có hiệu lực sau khi khởi động lại ứng dụng</string>
|
<string name="dpi_applied_success">DPI đã được đặt thành %1$d, có hiệu lực sau khi khởi động lại ứng dụng</string>
|
||||||
<!-- Language settings related strings -->
|
<!-- Language settings related strings -->
|
||||||
<string name="language_setting">Ngôn ngữ ứng dụng</string>
|
<string name="language_setting">Ngôn ngữ ứng dụng</string>
|
||||||
<string name="language_follow_system">Theo dõi hệ thống</string>
|
<string name="language_follow_system">Mặc định theo hệ thống</string>
|
||||||
<string name="language_changed">Ngôn ngữ đã thay đổi, khởi động lại để áp dụng thay đổi</string>
|
<string name="language_changed">Ngôn ngữ đã thay đổi, khởi động lại để áp dụng thay đổi</string>
|
||||||
<string name="settings_card_dim">Độ trong suốt của thẻ</string>
|
<string name="settings_card_dim">Độ trong suốt của thẻ</string>
|
||||||
<!-- Super User Related -->
|
<!-- Super User Related -->
|
||||||
@@ -358,11 +360,12 @@
|
|||||||
<string name="unauthorized">Huỷ uỷ quyền</string>
|
<string name="unauthorized">Huỷ uỷ quyền</string>
|
||||||
<string name="selected">Đã chọn</string>
|
<string name="selected">Đã chọn</string>
|
||||||
<string name="select">Chọn</string>
|
<string name="select">Chọn</string>
|
||||||
<string name="profile_umount_modules_disable">Vô hiệu hóa tuỳ chỉnh của các Module</string>
|
<string name="profile_umount_modules_disable">Vô hiệu hóa bỏ gắn kết các module</string>
|
||||||
<!-- Flash related -->
|
<!-- Flash related -->
|
||||||
<string name="error_code">Code lỗi</string>
|
<string name="error_code">Code lỗi</string>
|
||||||
<string name="check_log">Vui lòng kiểm tra logs</string>
|
<string name="check_log">Vui lòng kiểm tra logs</string>
|
||||||
<string name="installing_module">Đang cài đặt module %1$d/%2$d</string>
|
<string name="installing_module">Đang cài đặt module %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">Cài đặt module %d thất bại</string>
|
<string name="module_failed_count">Cài đặt module %d thất bại</string>
|
||||||
<string name="module_download_error">Tải xuống mô hình không thành công</string>
|
<string name="module_download_error">Tải xuống module thất bại</string>
|
||||||
|
<string name="kernel_flashing">Kernel Flashing</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -113,6 +113,7 @@
|
|||||||
<string name="grant_root_failed">获取 root 失败!</string>
|
<string name="grant_root_failed">获取 root 失败!</string>
|
||||||
<string name="action">执行</string>
|
<string name="action">执行</string>
|
||||||
<string name="open">打开</string>
|
<string name="open">打开</string>
|
||||||
|
<string name="close">关闭</string>
|
||||||
<string name="enable_web_debugging">启用 WebView 调试</string>
|
<string name="enable_web_debugging">启用 WebView 调试</string>
|
||||||
<string name="enable_web_debugging_summary">可用于调试 WebUI 。请仅在需要时启用。</string>
|
<string name="enable_web_debugging_summary">可用于调试 WebUI 。请仅在需要时启用。</string>
|
||||||
<string name="direct_install">直接安装(推荐)</string>
|
<string name="direct_install">直接安装(推荐)</string>
|
||||||
@@ -208,7 +209,7 @@
|
|||||||
<string name="color_orange">橙色</string>
|
<string name="color_orange">橙色</string>
|
||||||
<string name="color_pink">粉色</string>
|
<string name="color_pink">粉色</string>
|
||||||
<string name="color_gray">高级灰</string>
|
<string name="color_gray">高级灰</string>
|
||||||
<string name="color_ivory">象牙白</string>
|
<string name="color_yellow">黄色</string>
|
||||||
<string name="flash_option">刷入选项</string>
|
<string name="flash_option">刷入选项</string>
|
||||||
<string name="flash_option_tip">选择要刷入的文件</string>
|
<string name="flash_option_tip">选择要刷入的文件</string>
|
||||||
<string name="horizon_kernel">刷写 AnyKernel3 压缩包</string>
|
<string name="horizon_kernel">刷写 AnyKernel3 压缩包</string>
|
||||||
@@ -223,7 +224,6 @@
|
|||||||
<string name="batch_authorization">授权</string>
|
<string name="batch_authorization">授权</string>
|
||||||
<string name="batch_cancel_authorization">撤销</string>
|
<string name="batch_cancel_authorization">撤销</string>
|
||||||
<string name="backup">备份</string>
|
<string name="backup">备份</string>
|
||||||
<string name="color_yellow">黄色</string>
|
|
||||||
<string name="kpm_title">内核模块</string>
|
<string name="kpm_title">内核模块</string>
|
||||||
<string name="kpm_empty">暂无已安装的内核模块</string>
|
<string name="kpm_empty">暂无已安装的内核模块</string>
|
||||||
<string name="kpm_version">版本</string>
|
<string name="kpm_version">版本</string>
|
||||||
@@ -296,7 +296,7 @@
|
|||||||
<string name="flash_failed_message">刷写失败</string>
|
<string name="flash_failed_message">刷写失败</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM修补/安装</string>
|
<string name="Lkm_install_methods">LKM修补/安装</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI安装</string>
|
<string name="GKI_install_methods">刷写 AnyKernel3</string>
|
||||||
<string name="kernel_version_log">内核版本:%1$s</string>
|
<string name="kernel_version_log">内核版本:%1$s</string>
|
||||||
<string name="tool_version_log">使用修补工具:%1$s</string>
|
<string name="tool_version_log">使用修补工具:%1$s</string>
|
||||||
<string name="configuration">配置</string>
|
<string name="configuration">配置</string>
|
||||||
@@ -326,8 +326,10 @@
|
|||||||
<string name="show_kpm_info">显示 KPM 功能</string>
|
<string name="show_kpm_info">显示 KPM 功能</string>
|
||||||
<string name="show_kpm_info_summary">在主页和底栏显示 KPM 相关功能和信息 (需要重新打开应用)</string>
|
<string name="show_kpm_info_summary">在主页和底栏显示 KPM 相关功能和信息 (需要重新打开应用)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">使用 WebUI X</string>
|
<string name="use_webuix">选择使用的 WebUI 引擎</string>
|
||||||
<string name="use_webuix_summary">使用支持更多 API 的 WebUI X 而不是 WebUI</string>
|
<string name="engine_auto_select">自动选择</string>
|
||||||
|
<string name="engine_force_webuix">强制使用 WebUI X</string>
|
||||||
|
<string name="engine_force_ksu">强制使用 KSU 的 WebUI</string>
|
||||||
<string name="use_webuix_eruda">将 Eruda 注入 WebUI X</string>
|
<string name="use_webuix_eruda">将 Eruda 注入 WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">在 WebUI X 中注入调试控制台,使调试更容易,需要启用 WebView 调试</string>
|
<string name="use_webuix_eruda_summary">在 WebUI X 中注入调试控制台,使调试更容易,需要启用 WebView 调试</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
@@ -365,4 +367,5 @@
|
|||||||
<string name="installing_module">正在安装模块 %1$d/%2$d</string>
|
<string name="installing_module">正在安装模块 %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d 个模块安装失败</string>
|
<string name="module_failed_count">%d 个模块安装失败</string>
|
||||||
<string name="module_download_error">模块下载失败</string>
|
<string name="module_download_error">模块下载失败</string>
|
||||||
|
<string name="kernel_flashing">内核刷写</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
<string name="home_unsupported_reason">KernelSU 現在僅支援 GKI 核心</string>
|
<string name="home_unsupported_reason">KernelSU 現在僅支援 GKI 核心</string>
|
||||||
<string name="home_kernel">核心</string>
|
<string name="home_kernel">核心</string>
|
||||||
<string name="home_susfs">SuSFS: %s</string>
|
<string name="home_susfs">SuSFS: %s</string>
|
||||||
<string name="home_susfs_version">SuSFS Version</string>
|
<string name="home_susfs_version">SuSFS 版本</string>
|
||||||
<string name="home_susfs_sus_su">SuS SU</string>
|
<string name="home_susfs_sus_su">SuSFS: %s</string>
|
||||||
<string name="home_manager_version">管理器版本</string>
|
<string name="home_manager_version">管理器版本</string>
|
||||||
<string name="home_fingerprint">指紋</string>
|
<string name="home_fingerprint">指紋</string>
|
||||||
<string name="home_selinux_status">SELinux 狀態</string>
|
<string name="home_selinux_status">SELinux 狀態</string>
|
||||||
@@ -25,10 +25,10 @@
|
|||||||
<string name="module_failed_to_disable">無法停用模組:%s</string>
|
<string name="module_failed_to_disable">無法停用模組:%s</string>
|
||||||
<string name="module_empty">尚未安裝模組</string>
|
<string name="module_empty">尚未安裝模組</string>
|
||||||
<string name="module">模組</string>
|
<string name="module">模組</string>
|
||||||
<string name="module_sort_action_first">Sort (Action first)</string>
|
<string name="module_sort_action_first">排序(活躍優先)</string>
|
||||||
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
|
<string name="module_sort_enabled_first">排序(已啟用優先)</string>
|
||||||
<string name="uninstall">解除安裝</string>
|
<string name="uninstall">解除安裝</string>
|
||||||
<string name="restore">Restore</string>
|
<string name="restore">恢復</string>
|
||||||
<string name="module_install">安裝</string>
|
<string name="module_install">安裝</string>
|
||||||
<string name="install">安裝</string>
|
<string name="install">安裝</string>
|
||||||
<string name="reboot">重新啟動</string>
|
<string name="reboot">重新啟動</string>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<string name="home_click_to_learn_kernelsu">瞭解如何安裝 KernelSU 以及如何開發模組</string>
|
<string name="home_click_to_learn_kernelsu">瞭解如何安裝 KernelSU 以及如何開發模組</string>
|
||||||
<string name="home_support_title">支援開發</string>
|
<string name="home_support_title">支援開發</string>
|
||||||
<string name="home_support_content">KernelSU 將保持免費和開源,您可以考慮向開發人員贊助以表示支持。</string>
|
<string name="home_support_content">KernelSU 將保持免費和開源,您可以考慮向開發人員贊助以表示支持。</string>
|
||||||
<string name="about_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
<string name="about_source_code"><![CDATA[在 %1$s 查看源代碼<br/>加入我們的 %2$s 頻道]]></string>
|
||||||
<string name="profile_default">預設</string>
|
<string name="profile_default">預設</string>
|
||||||
<string name="profile_template">範本</string>
|
<string name="profile_template">範本</string>
|
||||||
<string name="profile_custom">自訂</string>
|
<string name="profile_custom">自訂</string>
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
<string name="require_kernel_version" formatted="false">目前 KernelSU 版本 %d 過低,管理器無法正常運作。請升級至 %d 或更高版本!</string>
|
<string name="require_kernel_version" formatted="false">目前 KernelSU 版本 %d 過低,管理器無法正常運作。請升級至 %d 或更高版本!</string>
|
||||||
<string name="settings_umount_modules_default">預設解除安裝模組</string>
|
<string name="settings_umount_modules_default">預設解除安裝模組</string>
|
||||||
<string name="settings_umount_modules_default_summary">應用程式設定檔中「解除安裝模組」的全域預設值,如果啟用,將會為沒有設定檔的應用程式移除所有模組針對系統的修改。</string>
|
<string name="settings_umount_modules_default_summary">應用程式設定檔中「解除安裝模組」的全域預設值,如果啟用,將會為沒有設定檔的應用程式移除所有模組針對系統的修改。</string>
|
||||||
<string name="settings_susfs_toggle">Disable kprobe hooks</string>
|
<string name="settings_susfs_toggle">關閉kprobe鉤子</string>
|
||||||
<string name="profile_umount_modules_summary">啟用此選項將允許 KernelSU 為這個應用程式還原任何被模組修改過的檔案。</string>
|
<string name="profile_umount_modules_summary">啟用此選項將允許 KernelSU 為這個應用程式還原任何被模組修改過的檔案。</string>
|
||||||
<string name="profile_selinux_domain">網域</string>
|
<string name="profile_selinux_domain">網域</string>
|
||||||
<string name="profile_selinux_rules">規則</string>
|
<string name="profile_selinux_rules">規則</string>
|
||||||
@@ -111,8 +111,9 @@
|
|||||||
<string name="settings_check_update">檢查更新</string>
|
<string name="settings_check_update">檢查更新</string>
|
||||||
<string name="settings_check_update_summary">開啟應用程式時自動檢查更新</string>
|
<string name="settings_check_update_summary">開啟應用程式時自動檢查更新</string>
|
||||||
<string name="grant_root_failed">授予root權限失敗!</string>
|
<string name="grant_root_failed">授予root權限失敗!</string>
|
||||||
<string name="action">Action</string>
|
<string name="action">行動</string>
|
||||||
<string name="open">打開</string>
|
<string name="open">打開</string>
|
||||||
|
<string name="close">關閉</string>
|
||||||
<string name="enable_web_debugging">啟用 WebView 偵錯</string>
|
<string name="enable_web_debugging">啟用 WebView 偵錯</string>
|
||||||
<string name="enable_web_debugging_summary">可用於偵錯WebUI,請僅在需要時啟用。</string>
|
<string name="enable_web_debugging_summary">可用於偵錯WebUI,請僅在需要時啟用。</string>
|
||||||
<string name="direct_install">直接安裝(建議)</string>
|
<string name="direct_install">直接安裝(建議)</string>
|
||||||
@@ -125,246 +126,248 @@
|
|||||||
<string name="select_file_tip">建議使用 %1$s 分割區映像</string>
|
<string name="select_file_tip">建議使用 %1$s 分割區映像</string>
|
||||||
<string name="select_kmi">選擇KMI</string>
|
<string name="select_kmi">選擇KMI</string>
|
||||||
<string name="settings_uninstall">解除安裝</string>
|
<string name="settings_uninstall">解除安裝</string>
|
||||||
<string name="settings_uninstall_temporary">Uninstall temporarily</string>
|
<string name="settings_uninstall_temporary">暫時卸載</string>
|
||||||
<string name="settings_uninstall_permanent">Uninstall permanently</string>
|
<string name="settings_uninstall_permanent">永久卸載</string>
|
||||||
<string name="settings_restore_stock_image">Restore stock image</string>
|
<string name="settings_restore_stock_image">恢復鏡像</string>
|
||||||
<string name="settings_uninstall_temporary_message">Temporarily uninstall KernelSU, restore to original state after next reboot.</string>
|
<string name="settings_uninstall_temporary_message">永久卸載KernelSU, 重啟後將恢復到初始狀態.</string>
|
||||||
<string name="settings_uninstall_permanent_message">Uninstalling KernelSU (Root and all modules) completely and permanently.</string>
|
<string name="settings_uninstall_permanent_message">徹底卸載KernelSU(Root和所有模組)。</string>
|
||||||
<string name="settings_restore_stock_image_message">Restore the stock factory image (If a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Uninstall permanently\".</string>
|
<string name="settings_restore_stock_image_message">恢復原廠鏡像(如果有備份),通常在ota之前使用;如果你需要卸載KernelSU, 請使用徹底\"卸載\"。</string>
|
||||||
<string name="flashing">Flashing</string>
|
<string name="flashing">刷入中</string>
|
||||||
<string name="flash_success">Flash success</string>
|
<string name="flash_success">刷入成功</string>
|
||||||
<string name="flash_failed">Flash failed</string>
|
<string name="flash_failed">刷入失敗</string>
|
||||||
<string name="selected_lkm">Selected LKM: %s</string>
|
<string name="selected_lkm">選擇 LKM: %s</string>
|
||||||
<string name="save_log">保存日志</string>
|
<string name="save_log">保存日志</string>
|
||||||
<string name="log_saved">Logs saved</string>
|
<string name="log_saved">日志己存儲</string>
|
||||||
<string name="status_supported">Supported</string>
|
<string name="status_supported">已支持</string>
|
||||||
<string name="status_not_supported">Not Supported</string>
|
<string name="status_not_supported">未支持</string>
|
||||||
<string name="status_unknown">Unknown</string>
|
<string name="status_unknown">未知</string>
|
||||||
<string name="sus_su_mode">SuS SU mode:</string>
|
<string name="sus_su_mode">SuS SU 模組:</string>
|
||||||
<!-- Module related -->
|
<!-- Module related -->
|
||||||
<string name="module_install_confirm">confirm install module %1$s?</string>
|
<string name="module_install_confirm">確定安裝模組 %1$s?</string>
|
||||||
<string name="unknown_module">unknown module</string>
|
<string name="unknown_module">未知模組</string>
|
||||||
<!-- Restore related -->
|
<!-- Restore related -->
|
||||||
<string name="restore_confirm_title">Confirm Module Restoration</string>
|
<string name="restore_confirm_title">確認恢復模塊</string>
|
||||||
<string name="restore_confirm_message">This operation will overwrite all existing modules. Continue?</string>
|
<string name="restore_confirm_message">此操作將覆蓋所有模塊,確定繼續嗎?</string>
|
||||||
<string name="confirm">Confirm</string>
|
<string name="confirm">確定</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">取消</string>
|
||||||
<!-- Backup related -->
|
<!-- Backup related -->
|
||||||
<string name="backup_success">Backup successful (tar.gz)</string>
|
<string name="backup_success">備份成功(tar.gz)</string>
|
||||||
<string name="backup_failed">Backup failed: %1$s</string>
|
<string name="backup_failed">備份失敗: %1$s</string>
|
||||||
<string name="backup_modules">backup modules</string>
|
<string name="backup_modules">備份模塊</string>
|
||||||
<string name="restore_modules">restore modules</string>
|
<string name="restore_modules">恢復模塊</string>
|
||||||
<!-- Restore related messages -->
|
<!-- Restore related messages -->
|
||||||
<string name="restore_success">Modules restored successfully, restart required</string>
|
<string name="restore_success">模塊恢復成功,請重新恢復設備</string>
|
||||||
<string name="restore_failed">Restore failed: %1$s</string>
|
<string name="restore_failed">恢復失敗: %1$s</string>
|
||||||
<string name="restart_now">Restart Now</string>
|
<string name="restart_now">立即恢復</string>
|
||||||
<string name="unknown_error">Unknown error</string>
|
<string name="unknown_error">未知錯誤</string>
|
||||||
<!-- Command related -->
|
<!-- Command related -->
|
||||||
<string name="command_execution_failed">Command execution failed: %1$s</string>
|
<string name="command_execution_failed">命令執行失敗: %1$s</string>
|
||||||
<!-- Allowlist related -->
|
<!-- Allowlist related -->
|
||||||
<string name="allowlist_backup_success">Allowlist backup successful</string>
|
<string name="allowlist_backup_success">授權列表備份成功</string>
|
||||||
<string name="allowlist_backup_failed">Allowlist backup failed: %1$s</string>
|
<string name="allowlist_backup_failed">授權列表備份失敗: %1$s</string>
|
||||||
<string name="allowlist_restore_confirm_title">Confirm Allowlist Restoration</string>
|
<string name="allowlist_restore_confirm_title">確定恢復授權列表</string>
|
||||||
<string name="allowlist_restore_confirm_message">This operation will overwrite the current allowlist. Continue?</string>
|
<string name="allowlist_restore_confirm_message">此操作會覆蓋授權列表是否繼續?</string>
|
||||||
<string name="allowlist_restore_success">Allowlist restored successfully</string>
|
<string name="allowlist_restore_success">授權列表恢復成功</string>
|
||||||
<string name="allowlist_restore_failed">Allowlist restore failed: %1$s</string>
|
<string name="allowlist_restore_failed">授權列表備份失敗: %1$s</string>
|
||||||
<string name="backup_allowlist">Backup Allowlist</string>
|
<string name="backup_allowlist">備份授權列表</string>
|
||||||
<string name="restore_allowlist">Restore Allowlist</string>
|
<string name="restore_allowlist">恢復授權列表</string>
|
||||||
<string name="settings_custom_background">Custom App Background</string>
|
<string name="settings_custom_background">設定應用背景</string>
|
||||||
<string name="settings_custom_background_summary">Select an image as background</string>
|
<string name="settings_custom_background_summary">選擇一張圖片作為背景</string>
|
||||||
<string name="settings_card_alpha">Navigation bar transparency</string>
|
<string name="settings_card_alpha">導航欄透明度</string>
|
||||||
<string name="settings_restore_default">Restore default</string>
|
<string name="settings_restore_default">重置到默認</string>
|
||||||
<string name="home_android_version">Android version</string>
|
<string name="home_android_version">安卓版本</string>
|
||||||
<string name="home_device_model">Device model</string>
|
<string name="home_device_model">設備</string>
|
||||||
<string name="su_not_allowed">Granting superuser to %s is not allowed</string>
|
<string name="su_not_allowed">不允許授予 %s 超級用戶權限</string>
|
||||||
<string name="settings_disable_su">Disable su compatibility</string>
|
<string name="settings_disable_su">禁用su兼容性</string>
|
||||||
<string name="settings_disable_su_summary">Temporarily disable any applications from obtaining root privileges via the su command (existing root processes will not be affected).</string>
|
<string name="settings_disable_su_summary">禁止任何應用通過su獲取root權限(現在正在使用root的應用進程不受影響)。</string>
|
||||||
<string name="using_mksu_manager">You are using the SukiSU Beta manager</string>
|
<string name="using_mksu_manager">你正在使用Sukisu測試版管理器</string>
|
||||||
<string name="module_install_multiple_confirm">Are you sure you want to install the selected %d modules?</string>
|
<string name="module_install_multiple_confirm">你確定你想要選擇安裝 %d 模塊嗎?</string>
|
||||||
<string name="module_install_multiple_confirm_with_names">Sure you want to install the following %1$d modules? \n\n%2$s</string>
|
<string name="module_install_multiple_confirm_with_names">確定要安裝以下 %1$d 個模塊嗎?\n\n%2$s</string>
|
||||||
<string name="more_settings">More settings</string>
|
<string name="more_settings">更多設置</string>
|
||||||
<string name="selinux">SELinux</string>
|
<string name="selinux">SELinux</string>
|
||||||
<string name="selinux_enabled">Enabled</string>
|
<string name="selinux_enabled">嚴格模式</string>
|
||||||
<string name="selinux_disabled">Disabled</string>
|
<string name="selinux_disabled">寬容模式</string>
|
||||||
<string name="simple_mode">Simplicity mode</string>
|
<string name="simple_mode">簡單模式</string>
|
||||||
<string name="simple_mode_summary">Hides unnecessary cards when turned on</string>
|
<string name="simple_mode_summary">開啟隱藏不必要卡片</string>
|
||||||
<string name="hide_kernel_kernelsu_version">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version">隱藏內核版本</string>
|
||||||
<string name="hide_kernel_kernelsu_version_summary">Hide kernel version</string>
|
<string name="hide_kernel_kernelsu_version_summary">隱藏內核版本</string>
|
||||||
<string name="hide_other_info">Hide other info</string>
|
<string name="hide_other_info">隱藏其他信息</string>
|
||||||
<string name="hide_other_info_summary">Hides information about the number of super users, modules and KPM modules on the home page</string>
|
<string name="hide_other_info_summary">隱藏首頁上有關超級用戶、模組和KPM模組的數量資訊</string>
|
||||||
<string name="hide_susfs_status">Hide SuSFS status</string>
|
<string name="hide_susfs_status">隱藏 SuSFS 相關</string>
|
||||||
<string name="hide_susfs_status_summary">Hide SuSFS status information on the home page</string>
|
<string name="hide_susfs_status_summary">隱藏SuSFS 主頁的相關信息</string>
|
||||||
<string name="hide_link_card">Hide Link Card Status</string>
|
<string name="hide_link_card">隱藏鏈接卡片</string>
|
||||||
<string name="hide_link_card_summary">Hide link card information on the home page</string>
|
<string name="hide_link_card_summary">隱藏鏈接卡片信息</string>
|
||||||
<string name="theme_mode">Theme</string>
|
<string name="theme_mode">主題</string>
|
||||||
<string name="theme_follow_system">Follow system</string>
|
<string name="theme_follow_system">跟隨繫統</string>
|
||||||
<string name="theme_light">Light</string>
|
<string name="theme_light">明亮</string>
|
||||||
<string name="theme_dark">Dark</string>
|
<string name="theme_dark">深色</string>
|
||||||
<string name="manual_hook">Manual Hook</string>
|
<string name="manual_hook">手動鉤子</string>
|
||||||
<string name="dynamic_color_title">Dynamic colours</string>
|
<string name="dynamic_color_title">動態顏色</string>
|
||||||
<string name="dynamic_color_summary">Dynamic colours using system themes</string>
|
<string name="dynamic_color_summary">動態顏色跟隨繫統</string>
|
||||||
<string name="choose_theme_color">Choose a theme colour</string>
|
<string name="choose_theme_color">選擇主題顏色</string>
|
||||||
<string name="color_default">Blue</string>
|
<string name="color_default">藍色</string>
|
||||||
<string name="color_green">Green</string>
|
<string name="color_green">綠色</string>
|
||||||
<string name="color_purple">Purple</string>
|
<string name="color_purple">紫色</string>
|
||||||
<string name="color_orange">Orange</string>
|
<string name="color_orange">橙色</string>
|
||||||
<string name="color_pink">Pink</string>
|
<string name="color_pink">粉色</string>
|
||||||
<string name="color_gray">Gray</string>
|
<string name="color_gray">棕色</string>
|
||||||
<string name="color_ivory">Ivory</string>
|
<string name="color_yellow">黃色</string>
|
||||||
<string name="flash_option">Brush Options</string>
|
<string name="flash_option">刷寫選項</string>
|
||||||
<string name="flash_option_tip">Select the file to be flashed</string>
|
<string name="flash_option_tip">選擇刷寫文件</string>
|
||||||
<string name="horizon_kernel">Install Anykernel3</string>
|
<string name="horizon_kernel">安裝 Anykernel3</string>
|
||||||
<string name="horizon_kernel_summary">Flash AnyKernel3 kernel file</string>
|
<string name="horizon_kernel_summary">刷寫 Anykernel3 內核文件</string>
|
||||||
<string name="root_required">Requires root privileges</string>
|
<string name="root_required">需要root權限</string>
|
||||||
<string name="copy_failed">File Copy Failure</string>
|
<string name="copy_failed">文件復制失敗</string>
|
||||||
<string name="reboot_complete_title">Scrubbing complete</string>
|
<string name="reboot_complete_title">清理完成</string>
|
||||||
<string name="reboot_complete_msg">Whether to reboot immediately?</string>
|
<string name="reboot_complete_msg">是否立即重啟?</string>
|
||||||
<string name="yes">Yes</string>
|
<string name="yes">是</string>
|
||||||
<string name="no">No</string>
|
<string name="no">否</string>
|
||||||
<string name="failed_reboot">Reboot Failed</string>
|
<string name="failed_reboot">重啟失敗</string>
|
||||||
<string name="batch_authorization">empower</string>
|
<string name="batch_authorization">授權</string>
|
||||||
<string name="batch_cancel_authorization">withdraw</string>
|
<string name="batch_cancel_authorization">撤銷</string>
|
||||||
<string name="backup">Backup</string>
|
<string name="backup">備份</string>
|
||||||
<string name="color_yellow">Yellow</string>
|
|
||||||
<string name="kpm_title">KPM</string>
|
<string name="kpm_title">KPM</string>
|
||||||
<string name="kpm_empty">No installed kernel modules at this time</string>
|
<string name="kpm_empty">暫無已安裝的內核模塊</string>
|
||||||
<string name="kpm_version">Version</string>
|
<string name="kpm_version">版本</string>
|
||||||
<string name="kpm_author">Author</string>
|
<string name="kpm_author">作者</string>
|
||||||
<string name="kpm_uninstall">Uninstall</string>
|
<string name="kpm_uninstall">卸載</string>
|
||||||
<string name="kpm_uninstall_success">Uninstalled successfully</string>
|
<string name="kpm_uninstall_success">卸載成功</string>
|
||||||
<string name="kpm_uninstall_failed">Failed to uninstall</string>
|
<string name="kpm_uninstall_failed">卸載失敗</string>
|
||||||
<string name="kpm_install">Install</string>
|
<string name="kpm_install">安裝</string>
|
||||||
<string name="kpm_install_success">Load of kpm module successful</string>
|
<string name="kpm_install_success">加載KPM模塊成功</string>
|
||||||
<string name="kpm_install_failed">Load of kpm module failed</string>
|
<string name="kpm_install_failed">加載KPM模塊失敗</string>
|
||||||
<string name="kpm_args">Parameters</string>
|
<string name="kpm_args">參數</string>
|
||||||
<string name="kpm_control">Execute</string>
|
<string name="kpm_control">執行</string>
|
||||||
<string name="home_kpm_version">KPM Version</string>
|
<string name="home_kpm_version">KPM版本</string>
|
||||||
<string name="close_notice">Close</string>
|
<string name="close_notice">關閉</string>
|
||||||
<string name="kernel_module_notice">The following kernel module functions were developed by KernelPatch and modified to include the kernel module functions of SukiSU Ultra</string>
|
<string name="kernel_module_notice">以下內核模組函數由 KernelPatch 開發並修改為包含 SukiSU Ultra 的內核模組函數</string>
|
||||||
<string name="home_ContributionCard_kernelsu">SukiSU Ultra Look forward to</string>
|
<string name="home_ContributionCard_kernelsu">SukiSU Ultra未來展望</string>
|
||||||
<string name="kpm_control_success">Success</string>
|
<string name="kpm_control_success">成功</string>
|
||||||
<string name="kpm_control_failed">Failed</string>
|
<string name="kpm_control_failed">失败</string>
|
||||||
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra will be a relatively independent branch of KSU in the future, but we still appreciate the official KernelSU and MKSU etc. for their contributions!</string>
|
<string name="home_click_to_ContributionCard_kernelsu">SukiSU Ultra将来将成为一个相对独立嘅KSU分支, 但我們就会继续感谢KernelSU同MKSU等做出嘅贡献!</string>
|
||||||
<string name="not_supported">Unsupported</string>
|
<string name="not_supported">未支持</string>
|
||||||
<string name="supported">Supported</string>
|
<string name="supported">己支持</string>
|
||||||
<string name="home_kpm_module">"Number of KPM modules: %d "</string>
|
<string name="home_kpm_module">"KPM模块数量: %d "</string>
|
||||||
<string name="kpm_invalid_file">Invalid KPM file</string>
|
<string name="kpm_invalid_file">无效嘅kpm文件</string>
|
||||||
<string name="kernel_patched">Kernel not patched</string>
|
<string name="kernel_patched">內核仲未打布丁</string>
|
||||||
<string name="kernel_not_enabled">Kernel not configured</string>
|
<string name="kernel_not_enabled">內核仲未选项</string>
|
||||||
<string name="custom_settings">Custom settings</string>
|
<string name="custom_settings">更多设置</string>
|
||||||
<string name="kpm_install_mode">KPM Install</string>
|
<string name="kpm_install_mode">KPM 安装</string>
|
||||||
<string name="kpm_install_mode_load">Load</string>
|
<string name="kpm_install_mode_load">加载</string>
|
||||||
<string name="kpm_install_mode_embed">Embed</string>
|
<string name="kpm_install_mode_embed">嵌入</string>
|
||||||
<string name="kpm_install_mode_description">Please select: %1\$s Module Installation Mode \n\nLoad: Temporarily load the module \nEmbedded: Permanently install into the system</string>
|
<string name="kpm_install_mode_description">請选择: %1\$s 模組安装方式 \n\n加载: 臨時載入模組 \n己嵌入: 永久安装都系統</string>
|
||||||
<string name="log_failed_to_check_module_file">Failed to check module file existence</string>
|
<string name="log_failed_to_check_module_file">无法检查模組是否存在</string>
|
||||||
<string name="snackbar_failed_to_check_module_file">Unable to check if module file exists</string>
|
<string name="snackbar_failed_to_check_module_file">無法檢查模組檔是否存在</string>
|
||||||
<string name="confirm_uninstall_title">Confirm uninstallation</string>
|
<string name="confirm_uninstall_title">安装配置失败</string>
|
||||||
<string name="confirm_uninstall_confirm">Uninstall</string>
|
<string name="confirm_uninstall_confirm">卸载</string>
|
||||||
<string name="confirm_uninstall_dismiss">Cancel</string>
|
<string name="confirm_uninstall_dismiss">取消</string>
|
||||||
<string name="theme_color">Theme Color</string>
|
<string name="theme_color">主题颜色</string>
|
||||||
<string name="invalid_file_type">Incorrect file type! Please select .kpm file.</string>
|
<string name="invalid_file_type">檔類型不正確!請選擇 .kpm 檔.</string>
|
||||||
<string name="confirm_uninstall_title_with_filename">Uninstall</string>
|
<string name="confirm_uninstall_title_with_filename">卸载</string>
|
||||||
<string name="confirm_uninstall_content">The following KPM will be uninstalled: %s</string>
|
<string name="confirm_uninstall_content">將卸載以下 KPM: %s</string>
|
||||||
<string name="settings_susfs_toggle_summary">Disable kprobe hooks created by KernelSU, using inline hooks instead, which is similar to non-GKI kernel hooking method.</string>
|
<string name="settings_susfs_toggle_summary">關閉KernelSU的kprobe鉤子,改用inline鉤子,這類似於非 GKI 內核鉤子方法.</string>
|
||||||
<string name="image_editor_title">Adjust background image</string>
|
<string name="image_editor_title">調整背景图片</string>
|
||||||
<string name="image_editor_hint">Use two fingers to zoom the image, and one finger to drag it to adjust the position</string>
|
<string name="image_editor_hint">使用兩只手指縮放圖像,用一只手指拖動圖像以調整位置</string>
|
||||||
<string name="background_image_error">Could not load image</string>
|
<string name="background_image_error">加载图片失败</string>
|
||||||
<string name="reprovision">Reprovision</string>
|
<string name="reprovision">重新配置</string>
|
||||||
<!-- Kernel Flash Progress Related -->
|
<!-- Kernel Flash Progress Related -->
|
||||||
<string name="horizon_flash_title">Kernel Flashing</string>
|
<string name="horizon_flash_title">內核刷寫</string>
|
||||||
<string name="horizon_logs_label">Logs:</string>
|
<string name="horizon_logs_label">日志:</string>
|
||||||
<string name="horizon_flash_complete">Flash Complete</string>
|
<string name="horizon_flash_complete">刷寫完成</string>
|
||||||
<!-- Flash Status Related -->
|
<!-- Flash Status Related -->
|
||||||
<string name="horizon_preparing">Preparing…</string>
|
<string name="horizon_preparing">準備中…</string>
|
||||||
<string name="horizon_cleaning_files">Cleaning files…</string>
|
<string name="horizon_cleaning_files">正在清理文件…</string>
|
||||||
<string name="horizon_copying_files">Copying files…</string>
|
<string name="horizon_copying_files">復制文件中…</string>
|
||||||
<string name="horizon_extracting_tool">Extracting flash tool…</string>
|
<string name="horizon_extracting_tool">提取刷寫工具中…</string>
|
||||||
<string name="horizon_patching_script">Patching flash script…</string>
|
<string name="horizon_patching_script">修補刷寫腳本中…</string>
|
||||||
<string name="horizon_flashing">Flashing kernel…</string>
|
<string name="horizon_flashing">刷入內核…</string>
|
||||||
<string name="horizon_flash_complete_status">Flash completed</string>
|
<string name="horizon_flash_complete_status">刷寫完成</string>
|
||||||
<!-- Slot selection related strings -->
|
<!-- Slot selection related strings -->
|
||||||
<string name="select_slot_title">Select Flash Slot</string>
|
<string name="select_slot_title">選擇刷寫槽</string>
|
||||||
<string name="select_slot_description">Please select the target slot for flashing boot</string>
|
<string name="select_slot_description">選擇目標槽位以刷寫內核</string>
|
||||||
<string name="slot_a">Slot A</string>
|
<string name="slot_a">槽位 A</string>
|
||||||
<string name="slot_b">Slot B</string>
|
<string name="slot_b">槽位 B</string>
|
||||||
<string name="selected_slot">Selected slot: %1$s</string>
|
<string name="selected_slot">選擇槽位: %1$s</string>
|
||||||
<string name="horizon_getting_original_slot">Getting the original slot</string>
|
<string name="horizon_getting_original_slot">獲取原始槽位</string>
|
||||||
<string name="horizon_setting_target_slot">Setting the specified slot</string>
|
<string name="horizon_setting_target_slot">設定指定槽位</string>
|
||||||
<string name="horizon_restoring_original_slot">Restore Default Slot</string>
|
<string name="horizon_restoring_original_slot">恢復原始槽位</string>
|
||||||
<string name="current_slot">Current Slot:%1$s </string>
|
<string name="current_slot">當前槽位:%1$s </string>
|
||||||
<!-- Error Messages -->
|
<!-- Error Messages -->
|
||||||
<string name="horizon_copy_failed">Copy failed</string>
|
<string name="horizon_copy_failed">複製失敗</string>
|
||||||
<string name="horizon_unknown_error">Unknown error</string>
|
<string name="horizon_unknown_error">未知錯誤</string>
|
||||||
<string name="flash_failed_message">Flash failed</string>
|
<string name="flash_failed_message">刷寫失敗</string>
|
||||||
<!-- lkm/gki install -->
|
<!-- lkm/gki install -->
|
||||||
<string name="Lkm_install_methods">LKM repair/installation</string>
|
<string name="Lkm_install_methods">LKM 修補/安裝</string>
|
||||||
<string name="GKI_install_methods">GKI/non-GKI installation</string>
|
<string name="GKI_install_methods">正在刷寫AnyKernel3包</string>
|
||||||
<string name="kernel_version_log">Kernel version:%1$s</string>
|
<string name="kernel_version_log">內核版本:%1$s</string>
|
||||||
<string name="tool_version_log">Using the patching tool:%1$s</string>
|
<string name="tool_version_log">使用補丁工具:%1$s</string>
|
||||||
<string name="configuration">Configure</string>
|
<string name="configuration">配置</string>
|
||||||
<string name="app_settings">Application Settings</string>
|
<string name="app_settings">應用設置</string>
|
||||||
<string name="tools">Tools</string>
|
<string name="tools">工具</string>
|
||||||
<string name="currently_selected">Currently</string>
|
<string name="currently_selected">現在</string>
|
||||||
<!-- String resources used in SuperUser -->
|
<!-- String resources used in SuperUser -->
|
||||||
<string name="clear">Removals</string>
|
<string name="clear">清除</string>
|
||||||
<string name="apps_with_root">Applications with root privileges</string>
|
<string name="apps_with_root">應用已擁有root權限</string>
|
||||||
<string name="apps_with_custom_profile">Applications with customized configurations</string>
|
<string name="apps_with_custom_profile">應用已有特定配置</string>
|
||||||
<string name="other_apps">Applications with unchanged defaults</string>
|
<string name="other_apps">應用未修改</string>
|
||||||
<string name="no_apps_found">Application not found</string>
|
<string name="no_apps_found">未找到應用</string>
|
||||||
<string name="selinux_enabled_toast">SELinux Enabled</string>
|
<string name="selinux_enabled_toast">嚴格模式</string>
|
||||||
<string name="selinux_disabled_toast">SELinux Disabled</string>
|
<string name="selinux_disabled_toast">寬容模式</string>
|
||||||
<string name="selinux_change_failed">SELinux Status change failed</string>
|
<string name="selinux_change_failed">SELinux模式改變失敗</string>
|
||||||
<string name="advanced_settings">Advanced Settings</string>
|
<string name="advanced_settings">高級設置</string>
|
||||||
<string name="appearance_settings">Customize the toolbar</string>
|
<string name="appearance_settings">自定義工具欄</string>
|
||||||
<string name="back">Comeback</string>
|
<string name="back">返回</string>
|
||||||
<string name="expand">Be in full swing</string>
|
<string name="expand">處於活躍狀態</string>
|
||||||
<string name="collapse">put away</string>
|
<string name="collapse">拉開</string>
|
||||||
<string name="susfs_enabled">SuSFS enabled</string>
|
<string name="susfs_enabled">SuSFS 已啟用</string>
|
||||||
<string name="susfs_disabled">SuSFS disabled</string>
|
<string name="susfs_disabled">SuSFS 未啟用</string>
|
||||||
<string name="background_set_success">Background set successfully</string>
|
<string name="background_set_success">背景設置成功</string>
|
||||||
<string name="background_removed">Removed custom backgrounds</string>
|
<string name="background_removed">刪除背景</string>
|
||||||
<string name="root_require_for_install">Requires root privileges</string>
|
<string name="root_require_for_install">需要root權限</string>
|
||||||
<!-- KPM display settings -->
|
<!-- KPM display settings -->
|
||||||
<string name="show_kpm_info">Display KPM Function</string>
|
<string name="show_kpm_info">顯示KPM功能</string>
|
||||||
<string name="show_kpm_info_summary">Display KPM information and Function in home and bottom bar (Need to reopen the app)</string>
|
<string name="show_kpm_info_summary">顯示KPM功能和信息在主頁和工具欄(需要重新打開應用)</string>
|
||||||
<!-- Webui X settings -->
|
<!-- Webui X settings -->
|
||||||
<string name="use_webuix">Use WebUI X</string>
|
<string name="use_webuix">選擇使用的 WebUI 引擎</string>
|
||||||
<string name="use_webuix_summary">Use WebUI X instead of WebUI which supports more API\'s</string>
|
<string name="engine_auto_select">自動選擇</string>
|
||||||
<string name="use_webuix_eruda">Inject Eruda into WebUI X</string>
|
<string name="engine_force_webuix">強制使用 WebUI X</string>
|
||||||
<string name="use_webuix_eruda_summary">Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.</string>
|
<string name="engine_force_ksu">強制使用 KSU 的 WebUI</string>
|
||||||
|
<string name="use_webuix_eruda">將 Eruda 注入 WebUI X</string>
|
||||||
|
<string name="use_webuix_eruda_summary">在 WebUI X 中注入調試控制臺,使調用更容易,需要啟用 WebView 調試</string>
|
||||||
<!-- DPI setting related strings -->
|
<!-- DPI setting related strings -->
|
||||||
<string name="dpi_settings">DPI setting</string>
|
<string name="dpi_settings">DPI設置</string>
|
||||||
<string name="app_dpi_title">Applied DPI</string>
|
<string name="app_dpi_title">應用DPI</string>
|
||||||
<string name="app_dpi_summary">Adjust the screen display density for the current application only</string>
|
<string name="app_dpi_summary">請調整當前應用的屏幕顯示密度</string>
|
||||||
<string name="dpi_size_small">Small </string>
|
<string name="dpi_size_small">小 </string>
|
||||||
<string name="dpi_size_medium">Medium </string>
|
<string name="dpi_size_medium">中 </string>
|
||||||
<string name="dpi_size_large">Big</string>
|
<string name="dpi_size_large">大</string>
|
||||||
<string name="dpi_size_extra_large">oversize</string>
|
<string name="dpi_size_extra_large">超大</string>
|
||||||
<string name="dpi_size_custom">customizable</string>
|
<string name="dpi_size_custom">自定義</string>
|
||||||
<string name="dpi_apply_settings">Applying DPI settings</string>
|
<string name="dpi_apply_settings">應用DPI設置</string>
|
||||||
<string name="dpi_confirm_title">Confirm DPI change</string>
|
<string name="dpi_confirm_title">確定修改DPI</string>
|
||||||
<string name="dpi_confirm_message">Are you sure you want to change the application DPI from %1$d to %2$d?</string>
|
<string name="dpi_confirm_message">你是想把應用的DPI從 %1$d 改到 %2$d 嗎?</string>
|
||||||
<string name="dpi_confirm_summary">Application needs to be restarted to apply the new DPI settings, does not affect the system status bar or other applications</string>
|
<string name="dpi_confirm_summary">應用需要重新啟動,以應用新的DPI設置, 不影響繫統狀態或其他應用程序</string>
|
||||||
<string name="dpi_applied_success">DPI has been set to %1$d, effective after restarting the application</string>
|
<string name="dpi_applied_success">DPI 已設定為 %1$d,在重新啟動應用程式後生效</string>
|
||||||
<!-- Language settings related strings -->
|
<!-- Language settings related strings -->
|
||||||
<string name="language_setting">App Language</string>
|
<string name="language_setting">應用語言</string>
|
||||||
<string name="language_follow_system">Follow System</string>
|
<string name="language_follow_system">遵循繫統</string>
|
||||||
<string name="language_changed">Language changed, restarting to apply changes</string>
|
<string name="language_changed">應用的語言改變,正在重啟應用</string>
|
||||||
<string name="settings_card_dim">Card Darkness Adjustment</string>
|
<string name="settings_card_dim">卡片明暗度調整</string>
|
||||||
<!-- Super User Related -->
|
<!-- Super User Related -->
|
||||||
<string name="scroll_to_top">Top</string>
|
<string name="scroll_to_top">頂部</string>
|
||||||
<string name="scroll_to_bottom">Bottom</string>
|
<string name="scroll_to_bottom">底部</string>
|
||||||
<string name="scroll_to_top_description">Scroll to top</string>
|
<string name="scroll_to_top_description">回到置頂</string>
|
||||||
<string name="scroll_to_bottom_description">Scroll to the bottom</string>
|
<string name="scroll_to_bottom_description">返回底部</string>
|
||||||
<string name="authorized">authorized</string>
|
<string name="authorized">已授權</string>
|
||||||
<string name="unauthorized">unauthorized</string>
|
<string name="unauthorized">未授權</string>
|
||||||
<string name="selected">Selected</string>
|
<string name="selected">已選擇</string>
|
||||||
<string name="select">option</string>
|
<string name="select">選項</string>
|
||||||
<string name="profile_umount_modules_disable">Disable custom uninstallation module</string>
|
<string name="profile_umount_modules_disable">禁用自定義卸載模組</string>
|
||||||
<!-- Flash related -->
|
<!-- Flash related -->
|
||||||
<string name="error_code">error code</string>
|
<string name="error_code">代碼錯誤</string>
|
||||||
<string name="check_log">Please check the log</string>
|
<string name="check_log">請檢查日志</string>
|
||||||
<string name="installing_module">Module being installed %1$d/%2$d</string>
|
<string name="installing_module">正在安裝的模塊 %1$d/%2$d</string>
|
||||||
<string name="module_failed_count">%d Failed to install a new module</string>
|
<string name="module_failed_count">%d 安裝新模塊失敗</string>
|
||||||
<string name="module_download_error">Module download failed</string>
|
<string name="module_download_error">模塊下載失敗</string>
|
||||||
|
<string name="kernel_flashing">內核刷寫中</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||