Compare commits

..

No commits in common. 'master' and 'v2.0.1' have entirely different histories.

@ -1,2 +1 @@
patreon: Androidacy
custom: ["https://www.androidacy.com/membership-join/#utm_source=github&utm_medium=web&utm_campaign=ghsponsors"]
custom: ["https://www.paypal.com/paypalme/fox2code"]

@ -28,10 +28,10 @@ jobs:
with:
submodules: true
- name: Set up Java 19
- name: Set up Java 17
uses: actions/setup-java@v3
with:
java-version: 19
java-version: 17
distribution: 'temurin'
- name: Setup Android SDK
@ -44,7 +44,6 @@ jobs:
caches
notifications
jdks
${{ github.workspace }}/.gradle/configuration-cache
- name: Change wrapper permissions
run: chmod +x ./gradlew

@ -1,94 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "master" ]
pull_request: # The branches below must be a subset of the branches above
branches: [ "master" ]
schedule:
- cron: '24 17 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'java' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: Set up Java 19
uses: actions/setup-java@v3
with:
java-version: 19
distribution: 'temurin'
- name: Setup Android SDK
uses: android-actions/setup-android@v2
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
with:
gradle-home-cache-includes: |
caches
notifications
jdks
${{ github.workspace }}/.gradle/configuration-cache
- name: Change wrapper permissions
run: chmod +x ./gradlew
- name: Build apk debug
run: ./gradlew app:assembleDefaultDebug
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
with:
category: "/language:${{matrix.language}}"

@ -1,39 +0,0 @@
name: Dependencies
on:
push:
branches:
- master # run the action on your projects default branch
pull_request:
branches:
- master # run the action on your projects default branch
jobs:
build:
name: Dependencies
runs-on: ubuntu-latest
permissions: # The Dependency Submission API requires write permission
contents: write
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v3
- name: Set up JDK 19
uses: actions/setup-java@v3
with:
java-version: 19
distribution: 'temurin'
- name: Setup Android SDK
uses: android-actions/setup-android@v2
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Change wrapper permissions
run: chmod +x ./gradlew
- name: Run snapshot action
uses: mikepenz/gradle-dependency-submission@v1
with:
gradle-project-path: "."
gradle-build-module: ":app"

@ -1,40 +1,71 @@
# Androidacy Module Manager
# Fox's Magisk Module Manager
### Developed by Androidacy. Find us on the web [here](https://www.androidacy.com/?utm_source=fox-readme&utm_medium=web&utm_campagin=github).
### Sponsored by and developed with Androidacy. Find them on the web [here](https://www.androidacy.com/?utm_source=fox-readme&utm_medium=web&utm_campagin=github).
_If you're seeing this at the Fox2Code repo, the new repo is at [Androidacy/AndroidacyModuleManager](https://github.com/Androidacy/AndroidacyModuleManager)! The old repo may not receive consistent updates anymore!_
<details>
<summary>
Important news about Fox2Code
</summary>
## About
**Tl;Dr: Fox2Code is temporarily less involved with development and support due to health issues. Androidacy is happy to take on both in his absence, and will continue to provide both upon his return.**
The official Magisk Manager app has dropped it's support for downloading online modules, leaving users without a way to easily search for and download them. This app was created to help users download and install modules, and manage their own modules.
I have health problems that made me work slow on everything. I don't like sharing my health problems
but it has been to much recently for me to keep it for myself.
**This app is not officially supported by Magisk or its developers**
This has been too much for me recently, so my moderators (same that on telegram)
will be handling the project for me for a while.
I had theses problems even before I started FoxMMM, the only reason no one noticed is because I can
work or go to any school because of how much pain and exhaustion I feel everyday.
The only two thing that helped me reduce the pain is making code and playing with friends.
Even tho I'm very slow at doing anything, the only thing that made me look like I was working on
this project at a normal speed like someone that work is because 75% of my time was on this project.
There was also some times I couldn't work on this projects for multiple days because of my health,
sometimes I was forcing myself to change one line of code from this project because doing nothing
was more painful that trying something while in pain.
Spending time with my friend and working on this project was a sort of pain killer for me.
Even tho I received money from my parent and the government for my health problems, I didn't know
what to do with it cause anything I could have bought had no use for me because my extreme pain made
me unable to use anything (even play video games).
My health issues also prevented me to do any project of greater complexity that this, and without
community support I would have been physically unable to continue this project.
There was clues of my health problems, right on this project, and theses are the following:
- My commit time of day being random proving I have no jobs.
- Me not committing for entire week, or having only committed one line in a week.
- Me taking too much time to publish release after I did the release commit.
- Me missing obvious bugs and being able to do simple task properly
(Well maybe this last one is harder to prove via commit history)
But since many people are faking health issues for clout, if any data-scientist want to do an
analysis to prove what it would make my day, and I would be happy to give money if someone does
that because I don't know what do to with my money at this point.
This is really sickening peoples need to give proof for their mental/health issues because some
peoples fake having those issues for clout.
**The modules shown in this app are not affiliated with this app or Magisk**.
If you want to use my health problems for clout, I don't care as long as you are respectful, at
least you won't be hurting peoples with mental/health issues by faking having those issues.
## Features
- Download and install modules
- Manage your own modules
- Search for and download modules
- Supports custom repos
- Separate lists of local and remote modules
- Check for module updates automatically
- Monet theming
- Fully MD3 themed
- (Coming soon) Repo creation wizard
- (Coming soon) Module creator
I'll probably delete this section once my health would be gotten better, or at least good enough for
me to not be stuck in my bed at least once a day because of pain.
</details>
## Community
[![Telegram Group](https://img.shields.io/endpoint?color=neon&style=flat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fandroidacy_discussions)](https://telegram.dog/androidacy_discussions)
[![Telegram Group](https://img.shields.io/endpoint?color=neon&style=flat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2FFox2Code_Chat)](https://telegram.dog/Fox2Code_Chat)
<a href="https://translate.nift4.org/engage/foxmmm/">
<img src="https://translate.nift4.org/widgets/foxmmm/-/foxmmm/svg-badge.svg" alt="Translation status" />
</a>
### We'd like to thank Fox2Code for his initial work on the app.
This app was previously known as Fox's Magisk Module Manager (FoxMMM) and may still be referred to as that. Androidacy thanks Fox2Code for their initial work on this app, and wishes him the best in his future endeavours.
## Screenshots
Main activity:
@ -43,20 +74,30 @@ Main activity:
|:-----------------------------------------------------------------------------:|:-------------------------------------------------------------------------------:|
| [<img src="docs/screenshot-dark.jpg" width="250"/>](docs/screenshot-dark.jpg) | [<img src="docs/screenshot-light.jpg" width="250"/>](docs/screenshot-light.jpg) |
## What is this?
The official Magisk has dropped support to download online modules, so I made Fox's Magisk Module
Manager to help you download and install Magisk modules.
**This app is not officially supported by Magisk or its developers**
**The modules shown in this app are not affiliated with this app or Magisk**
(Please contact repo owners instead)
## Requirements
### Minimum / Recommended:
- Android 7.0+ / Android 8.0+
- Android 6.0+ / Android 7.0+
- Magisk 19.0+ / Magisk 21.2+
- An internet connection / A stable wifi connection
Note: This app may require the use of a VPN in countries with a state wide firewall.
## Installation
## For users
To install the app go to [our website](https://www.androidacy.com/downloads/?view=FoxMMM),
and download and install the latest `.apk` for your architecture on your device.
To install the app go to [releases](https://github.com/Fox2Code/FoxMagiskModuleManager/releases),
and download and install the latest `.apk` on your device.
## Repositories Available
@ -77,11 +118,11 @@ installing from them is at the user's own risk. Default repos can be enabled or
- [Read more](https://www.androidacycom/doing-it-alone-the-what-the-how-and-the-why/?utm_source=fox-readme&utm_medium=web&utm_campagin=github)
| [Privacy policy](https://www.androidacy.com/privacy/?utm_source=fox-readme&utm_medium=web&utm_campagin=github)
- Added features like module reviews, automatic VirusTotal scans, and more.
- Pays module developers for their work as part of the Revenue Sharing Program
- Pays module developers for their work as part of the Revenue Sharing Program
**Support:**
Support:
&emsp; [![Telegram Group](https://img.shields.io/endpoint?color=neon&style=flat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fandroidacy_discussions)](https://telegram.dog/androidacy_discussions)
[![Telegram Group](https://img.shields.io/endpoint?color=neon&style=flat&url=https%3A%2F%2Ftg.sumanjay.workers.dev%2Fandroidacy_discussions)](https://telegram.dog/androidacy_discussions)
#### [Magisk Alt Repo](https://github.com/Magisk-Modules-Alt-Repo)
@ -90,11 +131,10 @@ installing from them is at the user's own risk. Default repos can be enabled or
- May have lower quality, untested, or otherwise broken modules due to their policies or lack
thereof.
- Officially supported by Fox's mmm
- Disabled by default and no longer recommended. Kept as an alternative for those who want it
**Support:**
Support:
&emsp; [![GitHub issues](https://img.shields.io/github/issues/Magisk-Modules-Alt-Repo/submission)](https://github.com/Magisk-Modules-Alt-Repo/submission/issues)
[![GitHub issues](https://img.shields.io/github/issues/Magisk-Modules-Alt-Repo/submission)](https://github.com/Magisk-Modules-Alt-Repo/submission/issues)
**Please do not use GitHub issues for help or questions. GitHub issues are specifically for bug
reporting and general app feedback.**
@ -102,9 +142,13 @@ reporting and general app feedback.**
If a module is in multiple repos, the manager will just pick the most up to date version of the
module, if a module is in multiple repos it will just use first registered repo.
Note: If you or a friend uploaded a module and it doesn't appear in your module list you can disable
the low quality filter in the app settings.
Go to the [developer documentation](docs/DEVELOPERS.md) for more info.
## For developers
The manager can read a few new meta keys to allow modules to customize their own entry
The manager can read new meta keys to allow modules to customize their own entry
It also use `minApi`, `maxApi` and `minMagisk` in the `module.prop` to detect compatibility
And support the `support` and `donate` properties to allow them to add their own support links
@ -112,10 +156,7 @@ And if you want to be event fancier you can setup `config` to your own config ap
(Note: the manager use fallback values for some modules, see developer documentation for more info)
It also add new ways to control the installer ui via a new `#!` command system
It allows module developers to craft a more customizable install experience.
If you created and uploaded a module and it doesn't appear in your module list you can disable
the low quality filter in the app settings after enabling developer mode. **Ideally, we recommend you to fix your module metadata rather than disabling that filter.**
It allow module developers to have a more customizable install experience
For more information please check the [developer documentation](docs/DEVELOPERS.md)
@ -134,7 +175,7 @@ translations: [https://translate.nift4.org/engage/foxmmm/](https://translate.nif
### GitHub method (advanced users)
See [`app/src/main/res/values/strings.xml`](https://github.com/Androidacy/MagiskModuleManager/blob/master/app/src/main/res/values/strings.xml)
See [`app/src/main/res/values/strings.xml`](https://github.com/Fox2Code/FoxMagiskModuleManager/blob/master/app/src/main/res/values/strings.xml)
If your language is right to left don't forget to set `lang_support_rtl` to `true`.
@ -162,14 +203,14 @@ whatsoever for them, outside of direct implementation bugs.
## License
Fox's Magisk Module Manager, the icon, and names are copyright
2021-present [Fox2Code](https://github.com/Fox2Code). The Androidacy name(s), logo, integration, and
Fox's Magisk Manager, the icon, and names are copyright
2021-present [Fox2Code](https://github.com/Fox2Code). The Androidacy name, logo, integration, and
later portions of the code are copyright
2022-present [Androidacy](https://www.androidacy.com/?utm_source=fox-repo&utm_medium=web). See
[LICENSE](LICENCE) for details. Library licenses can be found in the licenses section of the app.
Modules and their files, names, and other assets are not covered by this license or other
agreements, and are not warranted, checked, or otherwise guaranteed by the authors of this app, and may have their own licenses, agreements, and terms, of which the author(s) of this app do not check or have any responsibility for.
agreements, and are not warranted, checked, or otherwise guaranteed by the authors of this app.
Some third party backend services may have additional terms, please check their
terms of service before

@ -28,7 +28,6 @@ android {
val gitRemote = providers.exec {
commandLine("git", "config", "--get", "remote.origin.url")
}.standardOutput.asText.get().toString().trim()
val timestamp = System.currentTimeMillis()
namespace = "com.fox2code.mmm"
compileSdk = 33
@ -38,13 +37,13 @@ android {
applicationId = "com.fox2code.mmm"
minSdk = 24
targetSdk = 33
versionCode = 70
versionName = "2.0.2"
versionCode = 67
versionName = "2.0.1"
vectorDrawables {
useSupportLibrary = true
}
multiDexEnabled = true
resourceConfigurations.addAll(listOf("ar", "bs", "cs", "de", "es-rMX", "fr", "hu", "id", "ja", "nl", "pl", "pt", "pt-rBR", "ro", "ru", "tr", "uk", "zh", "zh-rTW", "en"))
resourceConfigurations.addAll(listOf("ar", "bs", "de", "es-rMX", "fr", "hu", "id", "ja", "nl", "pl", "pt", "pt-rBR", "ro", "ru", "tr", "uk", "zh-rCN", "zh-rTW", "en"))
}
splits {
@ -55,7 +54,8 @@ android {
// Enables building multiple APKs per ABI.
isEnable = true
// By default all ABIs are included, so use reset()
// By default all ABIs are included, so use reset() and include to specify that you only
// want APKs for x86 and x86_64.
// Resets the list of ABIs for Gradle to create APKs for to none.
reset()
@ -95,8 +95,6 @@ android {
productFlavors {
create("default") {
dimension = "type"
// current timestamp of build
buildConfigField("long", "BUILD_TIME", "$timestamp")
// debug http requests. do not set this to true if you care about performance!!!!!
buildConfigField("boolean", "DEBUG_HTTP", "false")
// Latest commit hash as BuildConfig.COMMIT_HASH
@ -158,8 +156,6 @@ android {
create("play") {
dimension = "type"
applicationIdSuffix = ".play"
// current timestamp of build
buildConfigField("long", "BUILD_TIME", "$timestamp")
// debug http requests. do not set this to true if you care about performance!!!!!
buildConfigField("boolean", "DEBUG_HTTP", "false")
// Latest commit hash as BuildConfig.COMMIT_HASH
@ -220,8 +216,6 @@ android {
create("fdroid") {
dimension = "type"
applicationIdSuffix = ".fdroid"
// current timestamp of build
buildConfigField("long", "BUILD_TIME", "$timestamp")
// debug http requests. do not set this to true if you care about performance!!!!!
buildConfigField("boolean", "DEBUG_HTTP", "false")
@ -286,9 +280,8 @@ android {
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_19
targetCompatibility = JavaVersion.VERSION_19
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
lint {
@ -315,7 +308,6 @@ sentry {
setOf(
InstrumentationFeature.DATABASE,
InstrumentationFeature.FILE_IO,
InstrumentationFeature.OKHTTP,
InstrumentationFeature.COMPOSE
)
)
@ -329,7 +321,7 @@ sentry {
autoInstallation {
enabled.set(true)
sentryVersion.set("6.18.1")
sentryVersion.set("6.17.0")
}
includeDependenciesReport.set(true)
@ -412,30 +404,17 @@ dependencies {
// protobuf - fixes a crash on some devices
// implementation("com.google.protobuf:protobuf-javalite:3.22.2")
// google guava, maybe fix a bug
implementation("com.google.guava:guava:31.1-jre")
val libsuVersion = "5.0.5"
// The core module that provides APIs to a shell
implementation("com.github.topjohnwu.libsu:core:${libsuVersion}")
// Optional: APIs for creating root services. Depends on ":core"
implementation("com.github.topjohnwu.libsu:service:${libsuVersion}")
// Optional: Provides remote file system support
implementation("com.github.topjohnwu.libsu:io:${libsuVersion}")
implementation("com.github.topjohnwu.libsu:io:5.0.5")
implementation("com.github.Fox2Code:RosettaX:1.0.9")
implementation("com.github.Fox2Code:AndroidANSI:1.0.1")
// sentry
implementation("io.sentry:sentry-android:6.18.1")
implementation("io.sentry:sentry-android-timber:6.18.1")
implementation("io.sentry:sentry-android-fragment:6.18.1")
implementation("io.sentry:sentry-android-okhttp:6.18.1")
implementation("io.sentry:sentry-kotlin-extensions:6.18.1")
implementation("io.sentry:sentry-android-ndk:6.18.1")
implementation("io.sentry:sentry-android:6.17.0")
implementation("io.sentry:sentry-android-timber:6.17.0")
implementation("io.sentry:sentry-android-fragment:6.17.0")
implementation("io.sentry:sentry-android-okhttp:6.17.0")
implementation("io.sentry:sentry-kotlin-extensions:6.17.0")
implementation("io.sentry:sentry-android-ndk:6.17.0")
// Markdown
// TODO: switch to an updated implementation
@ -451,6 +430,9 @@ dependencies {
// timber
implementation("com.jakewharton.timber:timber:5.0.1")
// ksp
implementation("com.google.devtools.ksp:symbol-processing-api:1.8.20-1.0.10")
// encryption
implementation("androidx.security:security-crypto:1.1.0-alpha06")
@ -466,9 +448,6 @@ dependencies {
// debugging
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.10")
// desugaring
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3")
}
android {
@ -481,6 +460,11 @@ android {
viewBinding = true
buildConfig = true
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
jvmTarget = "17"
}
}
//noinspection GrDeprecatedAPIUsage
buildToolsVersion = "34.0.0 rc3"
@Suppress("DEPRECATION") packagingOptions {
@ -490,8 +474,15 @@ android {
}
}
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(19))
languageVersion.set(JavaLanguageVersion.of(17))
}
}

@ -188,14 +188,13 @@
}
# Keep all of Cronet API and google's internal classes
-keep class org.chromium.** { *; }
-keep class org.chromium.net.** { *; }
-keep class com.google.common.util.concurrent.** { *; }
-keepclassmembers class kotlin.SafePublicationLazyImpl {
java.lang.Object _value;
}
# fix bug with androidx work and future
-keep class androidx.work.impl.utils.futures.* { *; }
# Silence some warnings
-dontwarn android.os.SystemProperties
-dontwarn android.view.ThreadedRenderer

@ -28,7 +28,7 @@ public class AppUpdateManager {
public static final int FLAG_COMPAT_FORCE_HIDE = 0x0080;
public static final int FLAG_COMPAT_MMT_REBORN = 0x0100;
public static final int FLAG_COMPAT_ZIP_WRAPPER = 0x0200;
public static final String RELEASES_API_URL = "https://api.github.com/repos/Androidacy/MagiskModuleManager/releases/latest";
public static final String RELEASES_API_URL = "https://api.github.com/repos/Fox2Code/FoxMagiskModuleManager/releases/latest";
private static final AppUpdateManager INSTANCE = new AppUpdateManager();
private final HashMap<String, Integer> compatDataId = new HashMap<>();
private final Object updateLock = new Object();

@ -2,16 +2,18 @@ package com.fox2code.mmm;
import android.annotation.SuppressLint;
import android.content.ClipboardManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.EditText;
import android.widget.Toast;
import com.fox2code.foxcompat.app.FoxActivity;
import com.fox2code.foxcompat.app.FoxApplication;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textview.MaterialTextView;
import java.io.PrintWriter;
import java.io.StringWriter;
import io.sentry.Sentry;
@ -28,7 +30,14 @@ public class CrashHandler extends FoxActivity {
Timber.d("CrashHandler.onCreate: intent=%s", getIntent());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crash_handler);
// unlock webview
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
try {
// per process webview data dir
WebView.setDataDirectorySuffix(FoxApplication.getProcessName());
} catch (Exception e) {
Timber.e(e, "CrashHandler.onCreate: Failed to set webview data directory suffix");
}
}
// set crash_details MaterialTextView to the exception passed in the intent or unknown if null
// convert stacktrace from array to string, and pretty print it (first line is the exception, the rest is the stacktrace, with each line indented by 4 spaces)
MaterialTextView crashDetails = findViewById(R.id.crash_details);
@ -44,7 +53,7 @@ public class CrashHandler extends FoxActivity {
// if the exception is not null, set the crash details to the exception and stacktrace
// stacktrace is an StacktraceElement, so convert it to a string and replace the commas with newlines
StringWriter stringWriter = new StringWriter();
exception.printStackTrace(new PrintWriter(stringWriter));
exception.printStackTrace(new java.io.PrintWriter(stringWriter));
String stacktrace = stringWriter.toString();
stacktrace = stacktrace.replace(",", "\n ");
crashDetails.setText(getString(R.string.crash_full_stacktrace, stacktrace));

@ -23,8 +23,6 @@ import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.inputmethod.EditorInfo;
import android.widget.CheckBox;
import android.widget.Toast;
@ -48,7 +46,6 @@ import com.fox2code.mmm.manager.ModuleManager;
import com.fox2code.mmm.module.ModuleViewAdapter;
import com.fox2code.mmm.module.ModuleViewListBuilder;
import com.fox2code.mmm.repo.RepoManager;
import com.fox2code.mmm.repo.RepoModule;
import com.fox2code.mmm.settings.SettingsActivity;
import com.fox2code.mmm.utils.ExternalHelper;
import com.fox2code.mmm.utils.io.net.Http;
@ -60,9 +57,6 @@ import com.google.android.material.snackbar.Snackbar;
import org.matomo.sdk.extra.TrackHelper;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import io.realm.Realm;
@ -73,8 +67,6 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
private static final int PRECISION = 10000;
public static boolean doSetupNowRunning = true;
public static boolean doSetupRestarting = false;
public static List<LocalModuleInfo> localModuleInfoList = new ArrayList<>();
public static List<RepoModule> onlineModuleInfoList = new ArrayList<>();
public final ModuleViewListBuilder moduleViewListBuilder;
public final ModuleViewListBuilder moduleViewListBuilderOnline;
public LinearProgressIndicator progressIndicator;
@ -128,21 +120,12 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
}
TrackHelper.track().event("enabled_repos", enabledRepos.toString()).with(MainApplication.getINSTANCE().getTracker());
realm.close();
// hide this behind a buildconfig flag for now, but crash the app if it's not an official build and not debug
if (BuildConfig.ENABLE_PROTECTION && !Iof && !BuildConfig.DEBUG) {
throw new RuntimeException("This is not an official build of FoxMMM");
} else if (!Iof && !BuildConfig.DEBUG) {
// log all shared preferences that are present
if (!Iof) {
Timber.w("You may be running an untrusted build.");
// Show a toast to warn the user
Toast.makeText(this, R.string.not_official_build, Toast.LENGTH_LONG).show();
}
Timestamp ts = new Timestamp(System.currentTimeMillis() - (30L * 24 * 60 * 60 * 1000));
// check if this build has expired
Timestamp buildTime = new Timestamp(BuildConfig.BUILD_TIME);
// if the build time is more than 30 days ago, throw an exception
if (ts.getTime() >= buildTime.getTime()) {
throw new IllegalStateException("This build has expired. Please download a stable build or update to the latest version.");
}
setContentView(R.layout.activity_main);
this.setTitle(R.string.app_name);
// set window flags to ignore status bar
@ -180,40 +163,6 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState != RecyclerView.SCROLL_STATE_IDLE)
MainActivity.this.searchView.clearFocus();
// hide search view when scrolling
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
MainActivity.this.searchCard.animate().translationY(-MainActivity.this.searchCard.getHeight()).setInterpolator(new AccelerateInterpolator(2)).start();
}
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// if the user scrolled up, show the search bar
if (dy < 0) {
MainActivity.this.searchCard.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start();
}
}
});
// same for online
this.moduleListOnline.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState != RecyclerView.SCROLL_STATE_IDLE)
MainActivity.this.searchView.clearFocus();
// hide search view when scrolling
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
MainActivity.this.searchCard.animate().translationY(-MainActivity.this.searchCard.getHeight()).setInterpolator(new AccelerateInterpolator(2)).start();
}
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// if the user scrolled up, show the search bar
if (dy < 0) {
MainActivity.this.searchCard.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start();
}
}
});
this.searchCard.setRadius(this.searchCard.getHeight() / 2F);
@ -298,15 +247,13 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
moduleViewListBuilder.addNotification(NotificationType.INSTALL_FROM_STORAGE);
ModuleManager.getINSTANCE().scan();
ModuleManager.getINSTANCE().runAfterScan(moduleViewListBuilder::appendInstalledModules);
ModuleManager.getINSTANCE().runAfterScan(moduleViewListBuilderOnline::appendRemoteModules);
this.commonNext();
}
@Override
public void onFailure(int error) {
Timber.e("Failed to get magisk path!");
Timber.i("Failed to get magisk path!");
moduleViewListBuilder.addNotification(InstallerInitializer.getErrorNotification());
moduleViewListBuilderOnline.addNotification(InstallerInitializer.getErrorNotification());
this.commonNext();
}
@ -318,7 +265,6 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
NotificationType.NO_INTERNET.autoAdd(moduleViewListBuilderOnline);
// hide progress bar is repo-manager says we have no internet
if (!RepoManager.getINSTANCE().hasConnectivity()) {
Timber.i("No connection, hiding progress");
runOnUiThread(() -> {
progressIndicator.setVisibility(View.GONE);
progressIndicator.setIndeterminate(false);
@ -343,6 +289,12 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
});
}
moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter);
runOnUiThread(() -> {
progressIndicator.setIndeterminate(false);
progressIndicator.setMax(PRECISION);
// Fix insets not being accounted for correctly
updateScreenInsets(getResources().getConfiguration());
});
Timber.i("Scanning for modules!");
if (BuildConfig.DEBUG) Timber.i("Initialize Update");
@ -404,9 +356,15 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
}
}
}
runOnUiThread(() -> {
progressIndicator.setProgressCompat(PRECISION, true);
progressIndicator.setVisibility(View.GONE);
searchView.setEnabled(true);
updateScreenInsets(getResources().getConfiguration());
});
if (BuildConfig.DEBUG) Timber.i("Apply");
RepoManager.getINSTANCE().runAfterUpdate(moduleViewListBuilderOnline::appendRemoteModules);
moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter);
// logic to handle updateable modules
moduleViewListBuilder.applyTo(moduleListOnline, moduleViewAdapterOnline);
moduleViewListBuilderOnline.applyTo(moduleListOnline, moduleViewAdapterOnline);
// if moduleViewListBuilderOnline has the upgradeable notification, show a badge on the online repo nav item
@ -420,12 +378,6 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
Timber.i("Badge applied");
});
}
runOnUiThread(() -> {
progressIndicator.setProgressCompat(PRECISION, true);
progressIndicator.setVisibility(View.GONE);
searchView.setEnabled(true);
updateScreenInsets(getResources().getConfiguration());
});
Timber.i("Finished app opening state!");
}
}, true);
@ -452,7 +404,7 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
}
Timber.d("Preference changed: %s", key);
};
MainApplication.getSharedPreferences("mmm").registerOnSharedPreferenceChangeListener(listener);
MainApplication.getPreferences("mmm").registerOnSharedPreferenceChangeListener(listener);
}
private void cardIconifyUpdate() {
@ -538,9 +490,7 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
@Override
public void onFailure(int error) {
Timber.e("Error: %s", error);
moduleViewListBuilder.addNotification(InstallerInitializer.getErrorNotification());
moduleViewListBuilderOnline.addNotification(InstallerInitializer.getErrorNotification());
this.commonNext();
}
@ -568,7 +518,6 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
if (BuildConfig.DEBUG) Timber.i("Apply");
RepoManager.getINSTANCE().runAfterUpdate(moduleViewListBuilderOnline::appendRemoteModules);
Timber.i("Common Before applyTo");
moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter);
moduleViewListBuilderOnline.applyTo(moduleListOnline, moduleViewAdapterOnline);
Timber.i("Common After");
}
@ -632,10 +581,9 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
});
NotificationType.NEED_CAPTCHA_ANDROIDACY.autoAdd(moduleViewListBuilder);
RepoManager.getINSTANCE().updateEnabledStates();
RepoManager.getINSTANCE().runAfterUpdate(moduleViewListBuilder::appendInstalledModules);
RepoManager.getINSTANCE().runAfterUpdate(moduleViewListBuilderOnline::appendRemoteModules);
this.moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter);
this.moduleViewListBuilderOnline.applyTo(moduleListOnline, moduleViewAdapterOnline);
this.moduleViewListBuilder.applyTo(moduleList, moduleViewAdapter);
}, "Repo update thread").start();
}
@ -799,8 +747,8 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
private void checkShowInitialSetup() {
if (BuildConfig.DEBUG) Timber.i("Checking if we need to run setup");
// Check if this is the first launch using prefs and if doSetupRestarting was passed in the intent
SharedPreferences prefs = MainApplication.getSharedPreferences("mmm");
boolean firstLaunch = !Objects.equals(prefs.getString("last_shown_setup", null), "v2");
SharedPreferences prefs = MainApplication.getPreferences("mmm");
boolean firstLaunch = !Objects.equals(prefs.getString("last_shown_setup", null), "v1");
// First launch
// this is intentionally separate from the above if statement, because it needs to be checked even if the first launch check is true due to some weird edge cases
if (getIntent().getBooleanExtra("doSetupRestarting", false)) {

@ -106,7 +106,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
public static String updateCheckBg;
static {
Shell.setDefaultBuilder(shellBuilder = Shell.Builder.create().setFlags(Shell.FLAG_REDIRECT_STDERR | Shell.FLAG_MOUNT_MASTER).setTimeout(15).setInitializers(InstallerInitializer.class));
Shell.setDefaultBuilder(shellBuilder = Shell.Builder.create().setFlags(Shell.FLAG_REDIRECT_STDERR).setTimeout(10).setInitializers(InstallerInitializer.class));
Random random = new Random();
do {
secret = random.nextLong();
@ -124,7 +124,6 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
private byte[] existingKey;
private Tracker tracker;
private boolean makingNewKey = false;
private boolean isCrashHandler;
public MainApplication() {
if (INSTANCE != null && INSTANCE != this)
@ -146,10 +145,9 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
intent.putExtra("secret", secret);
}
public static SharedPreferences getSharedPreferences(String name) {
public static SharedPreferences getPreferences(String name) {
// encryptedSharedPreferences is used
Context mContext = getINSTANCE();
name = name + "x";
if (mSharedPrefs == null) {
Timber.d("Creating shared prefs map");
mSharedPrefs = new HashMap<>();
@ -203,50 +201,50 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
// convert from String to boolean
return Boolean.parseBoolean(SHOWCASE_MODE_TRUE);
}
boolean showcaseMode = getSharedPreferences("mmm").getBoolean("pref_showcase_mode", false);
boolean showcaseMode = getPreferences("mmm").getBoolean("pref_showcase_mode", false);
SHOWCASE_MODE_TRUE = String.valueOf(showcaseMode);
return showcaseMode;
}
public static boolean shouldPreventReboot() {
return getSharedPreferences("mmm").getBoolean("pref_prevent_reboot", true);
return getPreferences("mmm").getBoolean("pref_prevent_reboot", true);
}
public static boolean isShowIncompatibleModules() {
return getSharedPreferences("mmm").getBoolean("pref_show_incompatible", false);
return getPreferences("mmm").getBoolean("pref_show_incompatible", false);
}
public static boolean isForceDarkTerminal() {
return getSharedPreferences("mmm").getBoolean("pref_force_dark_terminal", false);
return getPreferences("mmm").getBoolean("pref_force_dark_terminal", false);
}
public static boolean isTextWrapEnabled() {
return getSharedPreferences("mmm").getBoolean("pref_wrap_text", false);
return getPreferences("mmm").getBoolean("pref_wrap_text", false);
}
public static boolean isDohEnabled() {
return getSharedPreferences("mmm").getBoolean("pref_dns_over_https", true);
return getPreferences("mmm").getBoolean("pref_dns_over_https", true);
}
public static boolean isMonetEnabled() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && getSharedPreferences("mmm").getBoolean("pref_enable_monet", true);
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && getPreferences("mmm").getBoolean("pref_enable_monet", true);
}
public static boolean isBlurEnabled() {
return getSharedPreferences("mmm").getBoolean("pref_enable_blur", false);
return getPreferences("mmm").getBoolean("pref_enable_blur", false);
}
public static boolean isDeveloper() {
if (BuildConfig.DEBUG) return true;
return getSharedPreferences("mmm").getBoolean("developer", false);
return getPreferences("mmm").getBoolean("developer", false);
}
public static boolean isDisableLowQualityModuleFilter() {
return getSharedPreferences("mmm").getBoolean("pref_disable_low_quality_module_filter", false) && isDeveloper();
return getPreferences("mmm").getBoolean("pref_disable_low_quality_module_filter", false) && isDeveloper();
}
public static boolean isUsingMagiskCommand() {
return InstallerInitializer.peekMagiskVersion() >= Constants.MAGISK_VER_CODE_INSTALL_COMMAND && getSharedPreferences("mmm").getBoolean("pref_use_magisk_install_command", false) && isDeveloper();
return InstallerInitializer.peekMagiskVersion() >= Constants.MAGISK_VER_CODE_INSTALL_COMMAND && getPreferences("mmm").getBoolean("pref_use_magisk_install_command", false) && isDeveloper();
}
public static boolean isBackgroundUpdateCheckEnabled() {
@ -254,13 +252,13 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
return Boolean.parseBoolean(updateCheckBg);
}
boolean wrapped = isWrapped();
boolean updateCheckBgTemp = !wrapped && getSharedPreferences("mmm").getBoolean("pref_background_update_check", true);
boolean updateCheckBgTemp = !wrapped && getPreferences("mmm").getBoolean("pref_background_update_check", true);
updateCheckBg = String.valueOf(updateCheckBgTemp);
return Boolean.parseBoolean(updateCheckBg);
}
public static boolean isAndroidacyTestMode() {
return isDeveloper() && getSharedPreferences("mmm").getBoolean("pref_androidacy_test_mode", false);
return isDeveloper() && getPreferences("mmm").getBoolean("pref_androidacy_test_mode", false);
}
public static boolean isFirstBoot() {
@ -268,15 +266,15 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
}
public static void setHasGottenRootAccess(boolean bool) {
getSharedPreferences("mmm").edit().putBoolean("has_root_access", bool).apply();
getPreferences("mmm").edit().putBoolean("has_root_access", bool).apply();
}
public static boolean isCrashReportingEnabled() {
return SentryMain.IS_SENTRY_INSTALLED && getSharedPreferences("mmm").getBoolean("pref_crash_reporting", BuildConfig.DEFAULT_ENABLE_CRASH_REPORTING);
return SentryMain.IS_SENTRY_INSTALLED && getPreferences("mmm").getBoolean("pref_crash_reporting", BuildConfig.DEFAULT_ENABLE_CRASH_REPORTING);
}
public static SharedPreferences getBootSharedPreferences() {
return getSharedPreferences("mmm_boot");
return getPreferences("mmm_boot");
}
public static MainApplication getINSTANCE() {
@ -293,7 +291,6 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
}
public Markwon getMarkwon() {
if (isCrashHandler) return null;
if (this.markwon != null) return this.markwon;
FoxThemeWrapper contextThemeWrapper = this.markwonThemeContext;
if (contextThemeWrapper == null) {
@ -313,7 +310,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
@StyleRes int themeResId;
String theme;
boolean monet = isMonetEnabled();
switch (theme = getSharedPreferences("mmm").getString("pref_theme", "system")) {
switch (theme = getPreferences("mmm").getString("pref_theme", "system")) {
default:
Timber.w("Unknown theme id: %s", theme);
case "system":
@ -354,7 +351,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
@SuppressLint("NonConstantResourceId")
public boolean isLightTheme() {
return switch (getSharedPreferences("mmm").getString("pref_theme", "system")) {
return switch (getPreferences("mmm").getString("pref_theme", "system")) {
case "system" -> this.isSystemLightTheme();
case "dark", "black" -> false;
default -> true;
@ -382,7 +379,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
@Override
public void onCreate() {
supportedLocales.addAll(Arrays.asList("ar", "bs", "cs", "de", "es-rMX", "fr", "hu", "id", "ja", "nl", "pl", "pt", "pt-rBR", "ro", "ru", "tr", "uk", "zh", "zh-rTW", "en"));
supportedLocales.addAll(Arrays.asList("ar", "bs", "de", "es-rMX", "fr", "hu", "id", "ja", "nl", "pl", "pt", "pt-rBR", "ro", "ru", "tr", "uk", "zh-rCN", "zh-rTW", "en"));
if (INSTANCE == null) INSTANCE = this;
relPackageName = this.getPackageName();
super.onCreate();
@ -392,18 +389,8 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
Timber.i("Starting FoxMMM version %s (%d) - commit %s", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, BuildConfig.COMMIT_HASH);
// Update SSL Ciphers if update is possible
GMSProviderInstaller.installIfNeeded(this);
// detect if we're launching the crashhandler
// get intent that started the crashhandler
Intent intent = getIntent();
if (intent != null) {
if (intent.getClass().getName().equals("com.fox2code.mmm.CrashHandler")) {
isCrashHandler = true;
}
}
if (!isCrashHandler) {
Http.ensureCacheDirs();
Http.ensureURLHandler(getApplicationContext());
}
Http.ensureCacheDirs();
Http.ensureURLHandler(getApplicationContext());
Timber.d("Initializing FoxMMM");
Timber.d("Started from background: %s", !isInForeground());
Timber.d("FoxMMM is running in debug mode");
@ -420,10 +407,10 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
} else {
tracker.setOptOut(false);
}
if (getSharedPreferences("matomo").getBoolean("install_tracked", false)) {
if (getPreferences("matomo").getBoolean("install_tracked", false)) {
TrackHelper.track().download().with(MainApplication.getINSTANCE().getTracker());
Timber.d("Sent install event to matomo");
getSharedPreferences("matomo").edit().putBoolean("install_tracked", true).apply();
getPreferences("matomo").edit().putBoolean("install_tracked", true).apply();
} else {
Timber.d("Matomo already has install");
}
@ -435,9 +422,13 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
Iof = Arrays.asList(osh).contains(oosh);
} catch (PackageManager.NameNotFoundException ignored) {
}
SharedPreferences sharedPreferences = MainApplication.getSharedPreferences("mmm");
// hide this behind a buildconfig flag for now, but crash the app if it's not an official build and not debug
if (BuildConfig.ENABLE_PROTECTION && !Iof && !BuildConfig.DEBUG) {
throw new RuntimeException("This is not an official build of FoxMMM");
}
SharedPreferences sharedPreferences = MainApplication.getPreferences("mmm");
// We are only one process so it's ok to do this
SharedPreferences bootPrefs = MainApplication.getSharedPreferences("mmm_boot");
SharedPreferences bootPrefs = MainApplication.getPreferences("mmm_boot");
long lastBoot = System.currentTimeMillis() - SystemClock.elapsedRealtime();
long lastBootPrefs = bootPrefs.getLong("last_boot", 0);
if (lastBootPrefs == 0 || Math.abs(lastBoot - lastBootPrefs) > 100) {
@ -475,7 +466,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
}
private boolean isMatomoAllowed() {
return getSharedPreferences("mmm").getBoolean("pref_analytics_enabled", BuildConfig.DEFAULT_ENABLE_ANALYTICS);
return getPreferences("mmm").getBoolean("pref_analytics_enabled", BuildConfig.DEFAULT_ENABLE_ANALYTICS);
}
@SuppressWarnings("unused")
@ -593,7 +584,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
return existingKey;
}
// check if we have a key already
SharedPreferences sharedPreferences = MainApplication.getSharedPreferences("realm_key");
SharedPreferences sharedPreferences = MainApplication.getPreferences("realm_key");
if (sharedPreferences.contains("iv_and_encrypted_key")) {
return getExistingKey();
} else {
@ -662,7 +653,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
buffer.put(initializationVector);
buffer.put(encryptedKeyForRealm);
Timber.d("Created all keys successfully.");
MainApplication.getSharedPreferences("realm_key").edit().putString("iv_and_encrypted_key", Base64.encodeToString(initializationVectorAndEncryptedKey, Base64.NO_WRAP)).apply();
MainApplication.getPreferences("realm_key").edit().putString("iv_and_encrypted_key", Base64.encodeToString(initializationVectorAndEncryptedKey, Base64.NO_WRAP)).apply();
Timber.d("Saved the encrypted key in shared preferences.");
makingNewKey = false;
return realmKey; // pass to a realm configuration via encryptionKey()
@ -687,7 +678,7 @@ public class MainApplication extends FoxApplication implements androidx.work.Con
}
Timber.v("Keystore opened.");
// access the encrypted key that's stored in shared preferences
byte[] initializationVectorAndEncryptedKey = Base64.decode(MainApplication.getSharedPreferences("realm_key").getString("iv_and_encrypted_key", null), Base64.DEFAULT);
byte[] initializationVectorAndEncryptedKey = Base64.decode(MainApplication.getPreferences("realm_key").getString("iv_and_encrypted_key", null), Base64.DEFAULT);
Timber.d("Retrieved the encrypted key from shared preferences. Key length: %d", initializationVectorAndEncryptedKey.length);
ByteBuffer buffer = ByteBuffer.wrap(initializationVectorAndEncryptedKey);
buffer.order(ByteOrder.BIG_ENDIAN);

@ -99,7 +99,7 @@ public enum NotificationType implements NotificationTypeCst {
},
UPDATE_AVAILABLE(R.string.app_update_available, R.drawable.ic_baseline_system_update_24,
androidx.appcompat.R.attr.colorPrimary, com.google.android.material.R.attr.colorOnPrimary, v -> IntentHelper.openUrl(v.getContext(),
"https://github.com/Androidacy/MagiskModuleManager/releases"), false) {
"https://github.com/Fox2Code/FoxMagiskModuleManager/releases"), false) {
@Override
public boolean shouldRemove() {
return !AppUpdateManager.getAppUpdateManager().peekShouldUpdate();

@ -53,7 +53,7 @@ public class SetupActivity extends FoxActivity implements LanguageActivity {
createFiles();
disableUpdateActivityForFdroidFlavor();
// Set theme
SharedPreferences prefs = MainApplication.getSharedPreferences("mmm");
SharedPreferences prefs = MainApplication.getPreferences("mmm");
switch (prefs.getString("theme", "system")) {
case "light" -> setTheme(R.style.Theme_MagiskModuleManager_Monet_Light);
case "dark" -> setTheme(R.style.Theme_MagiskModuleManager_Monet_Dark);
@ -153,9 +153,12 @@ public class SetupActivity extends FoxActivity implements LanguageActivity {
// Set up the buttons
// Setup button
BottomNavigationItemView setupButton = view.findViewById(R.id.setup_finish);
// on clicking setup_agree_eula, enable the setup button if it's checked, if it's not, disable it
MaterialSwitch agreeEula = view.findViewById(R.id.setup_agree_eula);
agreeEula.setOnCheckedChangeListener((buttonView, isChecked) -> setupButton.setEnabled(isChecked));
// enable finish button when user scrolls to the bottom
findViewById(R.id.setupNestedScrollView).setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
if (scrollY > oldScrollY) {
setupButton.setEnabled(true);
}
});
setupButton.setOnClickListener(v -> {
Timber.i("Setup button clicked");
// get instance of editor
@ -197,7 +200,7 @@ public class SetupActivity extends FoxActivity implements LanguageActivity {
r.close();
Timber.d("Realm transaction committed");
});
editor.putString("last_shown_setup", "v2");
editor.putString("last_shown_setup", "v1");
// Commit the changes
editor.commit();
// sleep to allow the realm transaction to finish
@ -242,7 +245,7 @@ public class SetupActivity extends FoxActivity implements LanguageActivity {
return theme;
}
// Set the theme
SharedPreferences prefs = MainApplication.getSharedPreferences("mmm");
SharedPreferences prefs = MainApplication.getPreferences("mmm");
String themePref = prefs.getString("pref_theme", "system");
switch (themePref) {
case "light" -> {

@ -44,7 +44,7 @@ import timber.log.Timber;
@SuppressWarnings("KotlinInternalInJava")
public final class AndroidacyRepoData extends RepoData {
public static String ANDROIDACY_DEVICE_ID = null;
public static String token = MainApplication.getSharedPreferences("androidacy").getString("pref_androidacy_api_token", null);
public static String token = MainApplication.getPreferences("androidacy").getString("pref_androidacy_api_token", null);
static {
HttpUrl.Builder OK_HTTP_URL_BUILDER = new HttpUrl.Builder().scheme("https");
@ -92,7 +92,7 @@ public final class AndroidacyRepoData extends RepoData {
return ANDROIDACY_DEVICE_ID;
}
// Try to get the device ID from the shared preferences
SharedPreferences sharedPreferences = MainApplication.getSharedPreferences("androidacy");
SharedPreferences sharedPreferences = MainApplication.getPreferences("androidacy");
String deviceIdPref = sharedPreferences.getString("device_id", null);
if (deviceIdPref != null) {
ANDROIDACY_DEVICE_ID = deviceIdPref;
@ -164,7 +164,7 @@ public final class AndroidacyRepoData extends RepoData {
if (e.getErrorCode() == 401) {
Timber.w("Invalid token, resetting...");
// Remove saved preference
SharedPreferences.Editor editor = MainApplication.getSharedPreferences("androidacy").edit();
SharedPreferences.Editor editor = MainApplication.getPreferences("androidacy").edit();
editor.remove("pref_androidacy_api_token");
editor.apply();
return false;
@ -175,7 +175,7 @@ public final class AndroidacyRepoData extends RepoData {
Timber.w("Invalid token, resetting...");
Timber.w(e);
// Remove saved preference
SharedPreferences.Editor editor = MainApplication.getSharedPreferences("androidacy").edit();
SharedPreferences.Editor editor = MainApplication.getPreferences("androidacy").edit();
editor.remove("pref_androidacy_api_token");
editor.apply();
return false;
@ -187,7 +187,7 @@ public final class AndroidacyRepoData extends RepoData {
protected boolean prepare() {
// If ANDROIDACY_CLIENT_ID is not set or is empty, disable this repo and return
if (Objects.equals(BuildConfig.ANDROIDACY_CLIENT_ID, "")) {
SharedPreferences.Editor editor = MainApplication.getSharedPreferences("mmm").edit();
SharedPreferences.Editor editor = MainApplication.getPreferences("mmm").edit();
editor.putBoolean("pref_androidacy_repo_enabled", false);
editor.apply();
Timber.w("ANDROIDACY_CLIENT_ID is empty, disabling AndroidacyRepoData 2");
@ -226,7 +226,7 @@ public final class AndroidacyRepoData extends RepoData {
this.androidacyBlockade = time + 30_000L;
try {
if (token == null) {
token = MainApplication.getSharedPreferences("androidacy").getString("pref_androidacy_api_token", null);
token = MainApplication.getPreferences("androidacy").getString("pref_androidacy_api_token", null);
if (token != null && !this.isValidToken(token)) {
Timber.i("Token expired or invalid, requesting new one...");
token = null;
@ -278,7 +278,7 @@ public final class AndroidacyRepoData extends RepoData {
return false;
} else {
// Save token to shared preference
SharedPreferences.Editor editor = MainApplication.getSharedPreferences("androidacy").edit();
SharedPreferences.Editor editor = MainApplication.getPreferences("androidacy").edit();
editor.putString("pref_androidacy_api_token", token);
editor.apply();
Timber.i("Token saved to shared preference");

@ -7,8 +7,6 @@ import androidx.annotation.Nullable;
import com.fox2code.mmm.BuildConfig;
import java.util.Objects;
public enum AndroidacyUtil {
;
public static final String REFERRER = "utm_source=FoxMMM&utm_medium=app";
@ -23,13 +21,13 @@ public enum AndroidacyUtil {
static boolean isAndroidacyLink(@NonNull String url, @NonNull Uri uri) {
int i; // Check both string and Uri to mitigate parse exploit
return url.startsWith("https://") && (i = url.indexOf("/", 8)) != -1 && url.substring(8, i).endsWith("api.androidacy.com") && Objects.requireNonNull(uri.getHost()).endsWith("api.androidacy.com");
return url.startsWith("https://") && (i = url.indexOf("/", 8)) != -1 && url.substring(8, i).endsWith("api.androidacy.com") && uri.getHost().endsWith("api.androidacy.com");
}
public static boolean isAndroidacyFileUrl(@Nullable String url) {
if (url == null)
return false;
for (String prefix : new String[]{"https://production-api.androidacy.com/downloads/", "https://production-api.androidacy.com/magisk/file/", "https://staging-api.androidacy.com/magisk/file/"}) { // Make both staging and non staging act the same
for (String prefix : new String[]{"https://production-api.androidacy.com/magisk/file/", "https://staging-api.androidacy.com/magisk/file/"}) { // Make both staging and non staging act the same
if (url.startsWith(prefix))
return true;
}

@ -64,12 +64,6 @@ public class AndroidacyWebAPI {
void openNativeModuleDialogRaw(String moduleUrl, String moduleId, String installTitle, String checksum, boolean canInstall) {
if (BuildConfig.DEBUG)
Timber.d("ModuleDialog, downloadUrl: " + AndroidacyUtil.hideToken(moduleUrl) + ", moduleId: " + moduleId + ", installTitle: " + installTitle + ", checksum: " + checksum + ", canInstall: " + canInstall);
// moduleUrl should be a valid URL, i.e. in the androidacy.com domain
// if it is not, do not proceed
if (!AndroidacyUtil.isAndroidacyFileUrl(moduleUrl)) {
Timber.e("ModuleDialog, invalid URL: %s", moduleUrl);
return;
}
this.downloadMode = false;
RepoModule repoModule = AndroidacyRepoData.getInstance().moduleHashMap.get(installTitle);
String title, description;
@ -387,10 +381,8 @@ public class AndroidacyWebAPI {
*/
@JavascriptInterface
public String getAndroidacyModuleFile(String moduleId, String moduleFile) {
moduleId = moduleId.replaceAll("\\.", "").replaceAll("/", "");
if (moduleFile == null || this.consumedAction || !this.isAndroidacyModule(moduleId))
return "";
moduleFile = moduleFile.replaceAll("\\.", "").replaceAll("/", "");
File moduleFolder = new File("/data/adb/modules/" + moduleId);
File absModuleFile = new File(moduleFolder, moduleFile).getAbsoluteFile();
if (!absModuleFile.getPath().startsWith(moduleFolder.getPath()))
@ -409,7 +401,6 @@ public class AndroidacyWebAPI {
*/
@JavascriptInterface
public boolean setAndroidacyModuleMeta(String moduleId, String content) {
moduleId = moduleId.replaceAll("\\.", "").replaceAll("/", "");
if (content == null || this.consumedAction || !this.isAndroidacyModule(moduleId))
return false;
File androidacyMetaFile = new File("/data/adb/modules/" + moduleId + "/.androidacy");

@ -88,7 +88,7 @@ public class BackgroundUpdateChecker extends Worker {
static void doCheck(Context context) {
// first, check if the user has enabled background update checking
if (!MainApplication.getSharedPreferences("mmm").getBoolean("pref_background_update_check", false)) {
if (!MainApplication.getPreferences("mmm").getBoolean("pref_background_update_check", false)) {
return;
}
if (MainApplication.getINSTANCE().isInForeground()) {
@ -96,11 +96,11 @@ public class BackgroundUpdateChecker extends Worker {
return;
}
// next, check if user requires wifi
if (MainApplication.getSharedPreferences("mmm").getBoolean("pref_background_update_check_wifi", true)) {
if (MainApplication.getPreferences("mmm").getBoolean("pref_background_update_check_wifi", true)) {
// check if wifi is connected
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Network networkInfo = connectivityManager.getActiveNetwork();
if (networkInfo == null || !Objects.requireNonNull(connectivityManager.getNetworkCapabilities(networkInfo)).hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)) {
if (networkInfo == null || !connectivityManager.getNetworkCapabilities(networkInfo).hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)) {
Timber.w("Background update check: wifi not connected but required");
return;
}
@ -136,7 +136,7 @@ public class BackgroundUpdateChecker extends Worker {
if ("twrp-keep".equals(localModuleInfo.id)) continue;
// exclude all modules with id's stored in the pref pref_background_update_check_excludes
try {
if (Objects.requireNonNull(MainApplication.getSharedPreferences("mmm").getStringSet("pref_background_update_check_excludes", null)).contains(localModuleInfo.id))
if (MainApplication.getPreferences("mmm").getStringSet("pref_background_update_check_excludes", null).contains(localModuleInfo.id))
continue;
} catch (Exception ignored) {
}
@ -156,7 +156,7 @@ public class BackgroundUpdateChecker extends Worker {
}
});
// check for app updates
if (MainApplication.getSharedPreferences("mmm").getBoolean("pref_background_update_check_app", false)) {
if (MainApplication.getPreferences("mmm").getBoolean("pref_background_update_check_app", false)) {
try {
boolean shouldUpdate = AppUpdateManager.getAppUpdateManager().checkUpdate(true);
if (shouldUpdate) {
@ -175,7 +175,7 @@ public class BackgroundUpdateChecker extends Worker {
}
}
// increment or create counter in shared preferences
MainApplication.getSharedPreferences("mmm").edit().putInt("pref_background_update_counter", MainApplication.getSharedPreferences("mmm").getInt("pref_background_update_counter", 0) + 1).apply();
MainApplication.getPreferences("mmm").edit().putInt("pref_background_update_counter", MainApplication.getPreferences("mmm").getInt("pref_background_update_counter", 0) + 1).apply();
}
public static void postNotification(Context context, HashMap<String, String> updateable, int updateCount, boolean test) {
@ -213,7 +213,7 @@ public class BackgroundUpdateChecker extends Worker {
public static void onMainActivityCreate(Context context) {
// Refuse to run if first_launch pref is not false
if (!Objects.equals(MainApplication.getSharedPreferences("mmm").getString("last_shown_setup", null), "v2"))
if (!Objects.equals(MainApplication.getPreferences("mmm").getString("last_shown_setup", null), "v1"))
return;
// create notification channel group
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

@ -59,19 +59,11 @@ public class InstallerInitializer extends Shell.Initializer {
return InstallerInitializer.MAGISK_PATH;
}
/**
* Note: All mirrors are read only on latest magisk
*/
public static String peekMirrorPath() {
return InstallerInitializer.MAGISK_PATH == null ? null :
InstallerInitializer.MAGISK_PATH + "/.magisk/mirror";
}
/**
* Note: Used to detect which modules are currently loaded.
* <p>
* For read/write only "/data/adb/modules" should be used
*/
public static String peekModulesPath() {
return InstallerInitializer.MAGISK_PATH == null ? null :
InstallerInitializer.MAGISK_PATH + "/.magisk/modules";
@ -167,6 +159,7 @@ public class InstallerInitializer extends Shell.Initializer {
public boolean onInit(@NonNull Context context, @NonNull Shell shell) {
if (!shell.isRoot())
return true;
return shell.newJob().add("export ASH_STANDALONE=1").exec().isSuccess();
// switch to global namespace
return shell.newJob().add("export ASH_STANDALONE=1; nsenter -t 1 -m -u /data/adb/magisk/busybox ash").exec().isSuccess();
}
}

@ -57,8 +57,8 @@ public final class ModuleManager extends SyncManager {
}
protected void scanInternal(@NonNull UpdateListener updateListener) {
// if last_shown_setup is not "v2", then refuse to continue
if (!MainApplication.getSharedPreferences("mmm").getString("last_shown_setup", "").equals("v2")) {
// if last_shown_setup is not "v1", then refuse to continue
if (!MainApplication.getPreferences("mmm").getString("last_shown_setup", "").equals("v1")) {
return;
}
boolean firstScan = this.bootPrefs.getBoolean("mm_first_scan", true);

@ -27,8 +27,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.matomo.sdk.extra.TrackHelper;
import java.util.Objects;
import io.noties.markwon.Markwon;
import timber.log.Timber;
@ -68,24 +66,20 @@ public enum ActionButtonType {
}, UPDATE_INSTALL() {
@Override
public void update(Chip button, ModuleHolder moduleHolder) {
int icon;
int icon = moduleHolder.hasUpdate() ? R.drawable.ic_baseline_update_24 : R.drawable.ic_baseline_system_update_24;
button.setChipIcon(button.getContext().getDrawable(icon));
if (moduleHolder.hasUpdate()) {
icon = R.drawable.ic_baseline_update_24;
button.setText(R.string.update);
} else if (moduleHolder.moduleInfo != null) {
icon = R.drawable.ic_baseline_refresh_24;
button.setText(R.string.reinstall);
} else {
icon = R.drawable.ic_baseline_system_update_24;
button.setText(R.string.install);
}
button.setChipIcon(button.getContext().getDrawable(icon));
}
@Override
public void doAction(Chip button, ModuleHolder moduleHolder) {
ModuleInfo moduleInfo = moduleHolder.getMainModuleInfo();
if (moduleInfo == null) return;
if (moduleInfo == null)
return;
String name;
if (moduleHolder.moduleInfo != null) {
@ -95,7 +89,8 @@ public enum ActionButtonType {
}
TrackHelper.track().event("view_update_install", name).with(MainApplication.getINSTANCE().getTracker());
String updateZipUrl = moduleHolder.getUpdateZipUrl();
if (updateZipUrl == null) return;
if (updateZipUrl == null)
return;
// Androidacy manage the selection between download and install
if (AndroidacyUtil.isAndroidacyLink(updateZipUrl)) {
IntentHelper.openUrlAndroidacy(button.getContext(), updateZipUrl, true, moduleInfo.name, moduleInfo.config);
@ -137,7 +132,7 @@ public enum ActionButtonType {
}
}
if (markwon != null) {
TextView messageView = Objects.requireNonNull(alertDialog.getWindow()).findViewById(android.R.id.message);
TextView messageView = alertDialog.getWindow().findViewById(android.R.id.message);
markwon.setParsedMarkdown(messageView, (Spanned) desc);
}
}
@ -202,7 +197,8 @@ public enum ActionButtonType {
@Override
public void doAction(Chip button, ModuleHolder moduleHolder) {
String config = moduleHolder.getMainModuleConfig();
if (config == null) return;
if (config == null)
return;
String name;
if (moduleHolder.moduleInfo != null) {

@ -32,7 +32,6 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
public final Type separator;
public int footerPx;
public View.OnClickListener onClickListener;
public LocalModuleInfo moduleInfo;
public RepoModule repoModule;
public int filterLevel;
@ -72,19 +71,30 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
}
public ModuleInfo getMainModuleInfo() {
return this.repoModule != null && (this.moduleInfo == null || this.moduleInfo.versionCode < this.repoModule.moduleInfo.versionCode) ? this.repoModule.moduleInfo : this.moduleInfo;
return this.repoModule != null && (this.moduleInfo == null ||
this.moduleInfo.versionCode < this.repoModule.moduleInfo.versionCode)
? this.repoModule.moduleInfo : this.moduleInfo;
}
public String getUpdateZipUrl() {
return this.moduleInfo == null || (this.repoModule != null && this.moduleInfo.updateVersionCode < this.repoModule.moduleInfo.versionCode) ? this.repoModule.zipUrl : this.moduleInfo.updateZipUrl;
return this.moduleInfo == null || (this.repoModule != null &&
this.moduleInfo.updateVersionCode <
this.repoModule.moduleInfo.versionCode) ?
this.repoModule.zipUrl : this.moduleInfo.updateZipUrl;
}
public String getUpdateZipRepo() {
return this.moduleInfo == null || (this.repoModule != null && this.moduleInfo.updateVersionCode < this.repoModule.moduleInfo.versionCode) ? this.repoModule.repoData.id : "update_json";
return this.moduleInfo == null || (this.repoModule != null &&
this.moduleInfo.updateVersionCode <
this.repoModule.moduleInfo.versionCode) ?
this.repoModule.repoData.id : "update_json";
}
public String getUpdateZipChecksum() {
return this.moduleInfo == null || (this.repoModule != null && this.moduleInfo.updateVersionCode < this.repoModule.moduleInfo.versionCode) ? this.repoModule.checksum : this.moduleInfo.updateChecksum;
return this.moduleInfo == null || (this.repoModule != null &&
this.moduleInfo.updateVersionCode <
this.repoModule.moduleInfo.versionCode) ?
this.repoModule.checksum : this.moduleInfo.updateChecksum;
}
public String getMainModuleName() {
@ -110,7 +120,8 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
public String getUpdateTimeText() {
if (this.repoModule == null) return "";
long timeStamp = this.repoModule.lastUpdated;
return timeStamp <= 0 ? "" : MainApplication.formatTime(timeStamp);
return timeStamp <= 0 ? "" :
MainApplication.formatTime(timeStamp);
}
public String getRepoName() {
@ -124,17 +135,16 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
public Type getType() {
if (this.footerPx != -1) {
Timber.i("Module %s is footer", this.moduleId);
return Type.FOOTER;
} else if (this.separator != null) {
Timber.i("Module %s is separator", this.moduleId);
return Type.SEPARATOR;
} else if (this.notificationType != null) {
Timber.i("Module %s is notification", this.moduleId);
return Type.NOTIFICATION;
} else if (this.moduleInfo == null) {
return Type.INSTALLABLE;
} else if (this.moduleInfo.versionCode < this.moduleInfo.updateVersionCode || (this.repoModule != null && this.moduleInfo.versionCode < this.repoModule.moduleInfo.versionCode)) {
} else if (this.moduleInfo.versionCode < this.moduleInfo.updateVersionCode ||
(this.repoModule != null && this.moduleInfo.versionCode <
this.repoModule.moduleInfo.versionCode)) {
Timber.d("Module %s has update", this.moduleId);
MainApplication.getINSTANCE().modulesHaveUpdates = true;
if (!MainApplication.getINSTANCE().updateModules.contains(this.moduleId)) {
@ -142,7 +152,6 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
MainApplication.getINSTANCE().updateModuleCount++;
}
Timber.d("modulesHaveUpdates = %s, updateModuleCount = %s", MainApplication.getINSTANCE().modulesHaveUpdates, MainApplication.getINSTANCE().updateModuleCount);
Timber.d("Module %s has update", this.moduleId);
return Type.UPDATABLE;
} else {
return Type.INSTALLED;
@ -152,7 +161,8 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
public Type getCompareType(Type type) {
if (this.separator != null) {
return this.separator;
} else if (this.notificationType != null && this.notificationType.special) {
} else if (this.notificationType != null &&
this.notificationType.special) {
return Type.SPECIAL_NOTIFICATIONS;
} else {
return type;
@ -160,12 +170,11 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
}
public boolean shouldRemove() {
// okay so this is quite possibly the hackiest fucking piece of code i've ever written
// basically, if we have a repomodule that has moduleinfo but no update, remove it-
if (this.repoModule != null && this.moduleInfo != null && !hasUpdate()) {
return true;
}
return this.notificationType != null ? this.notificationType.shouldRemove() : this.footerPx == -1 && this.moduleInfo == null && (this.repoModule == null || !this.repoModule.repoData.isEnabled() || (PropUtils.isLowQualityModule(this.repoModule.moduleInfo) && !MainApplication.isDisableLowQualityModuleFilter()));
return this.notificationType != null ? this.notificationType.shouldRemove() :
this.footerPx == -1 && this.moduleInfo == null &&
(this.repoModule == null || !this.repoModule.repoData.isEnabled() ||
(PropUtils.isLowQualityModule(this.repoModule.moduleInfo) &&
!MainApplication.isDisableLowQualityModuleFilter()));
}
public void getButtons(Context context, List<ActionButtonType> buttonTypeList, boolean showcaseMode) {
@ -181,7 +190,8 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
if (this.repoModule != null && this.repoModule.notesUrl != null) {
buttonTypeList.add(ActionButtonType.INFO);
}
if ((this.repoModule != null || (localModuleInfo != null && localModuleInfo.updateZipUrl != null))) {
if ((this.repoModule != null || (localModuleInfo != null &&
localModuleInfo.updateZipUrl != null))) {
buttonTypeList.add(ActionButtonType.UPDATE_INSTALL);
}
String config = this.getMainModuleConfig();
@ -194,7 +204,8 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
XHooks.checkConfigTargetExists(context, pkg, config);
buttonTypeList.add(ActionButtonType.CONFIG);
} catch (PackageManager.NameNotFoundException e) {
Timber.w("Config package \"" + pkg + "\" missing for module \"" + this.moduleId + "\"");
Timber.w("Config package \"" + pkg +
"\" missing for module \"" + this.moduleId + "\"");
}
}
}
@ -217,7 +228,8 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
}
public boolean hasUpdate() {
return this.moduleInfo != null && this.repoModule != null && this.moduleInfo.versionCode < this.repoModule.moduleInfo.versionCode;
return this.moduleInfo != null && this.repoModule != null &&
this.moduleInfo.versionCode < this.repoModule.moduleInfo.versionCode;
}
@Override
@ -228,29 +240,29 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
Type selfType = this.getCompareType(selfTypeReal);
Type otherType = o.getCompareType(otherTypeReal);
int compare = selfType.compareTo(otherType);
return compare != 0 ? compare : selfTypeReal == otherTypeReal ? selfTypeReal.compare(this, o) : selfTypeReal.compareTo(otherTypeReal);
}
@NonNull
@Override
public String toString() {
return "ModuleHolder{" + "moduleId='" + moduleId + '\'' + ", notificationType=" + notificationType + ", separator=" + separator + ", footerPx=" + footerPx + '}';
return compare != 0 ? compare :
selfTypeReal == otherTypeReal ?
selfTypeReal.compare(this, o) :
selfTypeReal.compareTo(otherTypeReal);
}
public enum Type implements Comparator<ModuleHolder> {
HEADER(R.string.loading, false, false), SEPARATOR(R.string.loading, false, false) {
HEADER(R.string.loading, false, false),
SEPARATOR(R.string.loading, false, false) {
@Override
@SuppressWarnings("ConstantConditions")
public int compare(ModuleHolder o1, ModuleHolder o2) {
return o1.separator.compareTo(o2.separator);
}
}, NOTIFICATION(R.string.loading, true, false) {
},
NOTIFICATION(R.string.loading, true, false) {
@Override
@SuppressWarnings("ConstantConditions")
public int compare(ModuleHolder o1, ModuleHolder o2) {
return o1.notificationType.compareTo(o2.notificationType);
}
}, UPDATABLE(R.string.updatable, true, true) {
},
UPDATABLE(R.string.updatable, true, true) {
@Override
public int compare(ModuleHolder o1, ModuleHolder o2) {
int cmp = Integer.compare(o1.filterLevel, o2.filterLevel);
@ -261,15 +273,18 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
if (cmp != 0) return cmp;
return o1.getMainModuleName().compareTo(o2.getMainModuleName());
}
}, INSTALLED(R.string.installed, true, true) {
// get stacktrace for debugging
},
INSTALLED(R.string.installed, true, true) {
@Override
public int compare(ModuleHolder o1, ModuleHolder o2) {
int cmp = Integer.compare(o1.filterLevel, o2.filterLevel);
if (cmp != 0) return cmp;
return o1.getMainModuleNameLowercase().compareTo(o2.getMainModuleNameLowercase());
return o1.getMainModuleNameLowercase()
.compareTo(o2.getMainModuleNameLowercase());
}
}, SPECIAL_NOTIFICATIONS(R.string.loading, true, false), INSTALLABLE(R.string.online_repo, true, true) {
},
SPECIAL_NOTIFICATIONS(R.string.loading, true, false),
INSTALLABLE(R.string.online_repo, true, true) {
@Override
public int compare(ModuleHolder o1, ModuleHolder o2) {
int cmp = Integer.compare(o1.filterLevel, o2.filterLevel);
@ -280,7 +295,8 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
if (cmp != 0) return cmp;
return o1.getMainModuleName().compareTo(o2.getMainModuleName());
}
}, FOOTER(R.string.loading, false, false);
},
FOOTER(R.string.loading, false, false);
@StringRes
public final int title;
@ -307,4 +323,15 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
}
}
}
@NonNull
@Override
public String toString() {
return "ModuleHolder{" +
"moduleId='" + moduleId + '\'' +
", notificationType=" + notificationType +
", separator=" + separator +
", footerPx=" + footerPx +
'}';
}
}

@ -8,7 +8,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.fox2code.mmm.AppUpdateManager;
import com.fox2code.mmm.BuildConfig;
import com.fox2code.mmm.MainActivity;
import com.fox2code.mmm.MainApplication;
import com.fox2code.mmm.NotificationType;
import com.fox2code.mmm.installer.InstallerInitializer;
@ -85,8 +84,6 @@ public class ModuleViewListBuilder {
moduleManager.runAfterScan(() -> {
Timber.i("A1: %s", moduleManager.getModules().size());
for (LocalModuleInfo moduleInfo : moduleManager.getModules().values()) {
// add the local module to the list in MainActivity
MainActivity.localModuleInfoList.add(moduleInfo);
ModuleHolder moduleHolder = this.mappedModuleHolders.get(moduleInfo.id);
if (moduleHolder == null) {
this.mappedModuleHolders.put(moduleInfo.id,
@ -112,8 +109,6 @@ public class ModuleViewListBuilder {
Timber.i("A2: %s", repoManager.getModules().size());
boolean no32bitSupport = Build.SUPPORTED_32_BIT_ABIS.length == 0;
for (RepoModule repoModule : repoManager.getModules().values()) {
// add the remote module to the list in MainActivity
MainActivity.onlineModuleInfoList.add(repoModule);
// if repoData is null, something is wrong
if (repoModule.repoData == null) {
Timber.w("RepoData is null for module %s", repoModule.id);
@ -143,14 +138,6 @@ public class ModuleViewListBuilder {
moduleHolder = new ModuleHolder(repoModule.id));
}
moduleHolder.repoModule = repoModule;
// check if local module is installed
// iterate over MainActivity.localModuleInfoList until we hit the module with the same id
for (LocalModuleInfo localModuleInfo : MainActivity.localModuleInfoList) {
if (localModuleInfo.id.equals(repoModule.id)) {
moduleHolder.moduleInfo = localModuleInfo;
break;
}
}
}
});
}
@ -187,7 +174,7 @@ public class ModuleViewListBuilder {
return false;
}
public void applyTo(final RecyclerView moduleList, final ModuleViewAdapter moduleViewAdapter) {
public void applyTo(final RecyclerView moduleList,final ModuleViewAdapter moduleViewAdapter) {
if (this.updating) return;
this.updating = true;
ModuleManager.getINSTANCE().afterScan();

@ -28,7 +28,7 @@ public class CustomRepoManager {
this.customRepos = new String[MAX_CUSTOM_REPOS];
this.customReposCount = 0;
// refuse to load if setup is not complete
if (MainApplication.getSharedPreferences("mmm").getString("last_shown_setup", "").equals("")) {
if (MainApplication.getPreferences("mmm").getString("last_shown_setup", "").equals("")) {
return;
}
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder().name("ReposList.realm").encryptionKey(MainApplication.getINSTANCE().getKey()).allowQueriesOnUiThread(true).allowWritesOnUiThread(true).directory(MainApplication.getINSTANCE().getDataDirWithPath("realms")).schemaVersion(1).build();

@ -410,7 +410,7 @@ public class RepoData extends XRepo {
long diffMinutes = diff / (60 * 1000) % 60;
Timber.d("Repo " + this.id + " updated: " + diffMinutes + " minutes ago");
realm.close();
return diffMinutes > (BuildConfig.DEBUG ? 15 : 30);
return diffMinutes > (BuildConfig.DEBUG ? 15 : 20);
} else {
Timber.d("Repo " + this.id + " should update could not find repo in database");
Timber.d("This is probably an error, please report this to the developer");

@ -65,7 +65,7 @@ public final class RepoManager extends SyncManager {
this.repoData = new LinkedHashMap<>();
this.modules = new HashMap<>();
// refuse to load if setup is not complete
if (MainApplication.getSharedPreferences("mmm").getString("last_shown_setup", "").equals("")) {
if (MainApplication.getPreferences("mmm").getString("last_shown_setup", "").equals("")) {
return;
}
// We do not have repo list config yet.
@ -149,8 +149,8 @@ public final class RepoManager extends SyncManager {
@SuppressWarnings("StatementWithEmptyBody")
private void populateDefaultCache(RepoData repoData) {
// if last_shown_setup is not "v2", them=n refuse to continue
if (!MainApplication.getSharedPreferences("mmm").getString("last_shown_setup", "").equals("v2")) {
// if last_shown_setup is not "v1", them=n refuse to continue
if (!MainApplication.getPreferences("mmm").getString("last_shown_setup", "").equals("v1")) {
return;
}
// make sure repodata is not null
@ -311,7 +311,7 @@ public final class RepoManager extends SyncManager {
builder.setPositiveButton(android.R.string.ok, null);
if (repoUpdaters[finalI].repoData instanceof AndroidacyRepoData) {
builder.setNeutralButton(R.string.reset_api_key, (dialog, which) -> {
SharedPreferences.Editor editor = MainApplication.getSharedPreferences("androidacy").edit();
SharedPreferences.Editor editor = MainApplication.getPreferences("androidacy").edit();
editor.putString("androidacy_api_key", "");
editor.apply();
Toast.makeText(context, R.string.api_key_removed, Toast.LENGTH_SHORT).show();

@ -328,12 +328,14 @@ public class RepoUpdater {
realm.copyToRealmOrUpdate(moduleListCache);
realm.commitTransaction();
} catch (
Exception ignored) {
Exception e) {
Timber.w("Failed to get module info from module " + module + " in repo " + this.repoData.id + " with error " + e.getMessage());
}
}
realm.close();
} catch (
Exception ignored) {
Exception e) {
Timber.w("Failed to get module info from %s with error %s", this.repoData.id, e.getMessage());
}
this.indexRaw = null;
RealmConfiguration realmConfiguration2 = new RealmConfiguration.Builder().name("ReposList.realm").encryptionKey(MainApplication.getINSTANCE().getKey()).allowQueriesOnUiThread(true).allowWritesOnUiThread(true).directory(MainApplication.getINSTANCE().getDataDirWithPath("realms")).schemaVersion(1).build();

@ -197,7 +197,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
@Override
@SuppressWarnings("ConstantConditions")
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
String name = "mmmx";
String name = "mmm";
Context context = MainApplication.getINSTANCE();
MasterKey masterKey;
PreferenceManager preferenceManager = getPreferenceManager();
@ -543,7 +543,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
// set the box to unchecked
((SwitchPreferenceCompat) backgroundUpdateCheck).setChecked(false);
// ensure that the preference is false
MainApplication.getSharedPreferences("mmm").edit().putBoolean("pref_background_update_check", false).apply();
MainApplication.getPreferences("mmm").edit().putBoolean("pref_background_update_check", false).apply();
new MaterialAlertDialogBuilder(this.requireContext()).setTitle(R.string.permission_notification_title).setMessage(R.string.permission_notification_message).setPositiveButton(R.string.ok, (dialog, which) -> {
// Open the app settings
Intent intent = new Intent();
@ -627,7 +627,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
});
linkClickable.setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText, "https://github.com/Androidacy/MagiskModuleManager/releases/latest"));
clipboard.setPrimaryClip(ClipData.newPlainText(toastText, "https://github.com/Fox2Code/FoxMagiskModuleManager/releases/latest"));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
@ -646,12 +646,12 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
linkClickable.setOnPreferenceClickListener(p -> {
devModeStep = 0;
devModeStepFirstBootIgnore = true;
IntentHelper.openUrl(p.getContext(), "https://github.com/Androidacy/MagiskModuleManager/issues");
IntentHelper.openUrl(p.getContext(), "https://github.com/Fox2Code/FoxMagiskModuleManager/issues");
return true;
});
linkClickable.setOnPreferenceLongClickListener(p -> {
String toastText = requireContext().getString(R.string.link_copied);
clipboard.setPrimaryClip(ClipData.newPlainText(toastText, "https://github.com/Androidacy/MagiskModuleManager/issues"));
clipboard.setPrimaryClip(ClipData.newPlainText(toastText, "https://github.com/Fox2Code/FoxMagiskModuleManager/issues"));
Toast.makeText(requireContext(), toastText, Toast.LENGTH_SHORT).show();
return true;
});
@ -676,11 +676,11 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
if (devModeStep == 2) {
devModeStep = 0;
if (MainApplication.isDeveloper() && !BuildConfig.DEBUG) {
MainApplication.getSharedPreferences("mmm").edit().putBoolean("developer", false).apply();
MainApplication.getPreferences("mmm").edit().putBoolean("developer", false).apply();
Toast.makeText(getContext(), // Tell the user something changed
R.string.dev_mode_disabled, Toast.LENGTH_SHORT).show();
} else {
MainApplication.getSharedPreferences("mmm").edit().putBoolean("developer", true).apply();
MainApplication.getPreferences("mmm").edit().putBoolean("developer", true).apply();
Toast.makeText(getContext(), // Tell the user something changed
R.string.dev_mode_enabled, Toast.LENGTH_SHORT).show();
}
@ -948,7 +948,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
// Use MaterialAlertDialogBuilder
new MaterialAlertDialogBuilder(this.requireContext()).setTitle(R.string.warning).setCancelable(false).setMessage(R.string.androidacy_test_mode_warning).setPositiveButton(android.R.string.ok, (dialog, which) -> {
// User clicked OK button
MainApplication.getSharedPreferences("mmm").edit().putBoolean("androidacy_test_mode", true).apply();
MainApplication.getPreferences("mmm").edit().putBoolean("androidacy_test_mode", true).apply();
// Check the switch
Intent mStartActivity = new Intent(requireContext(), MainActivity.class);
mStartActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
@ -966,10 +966,10 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
SwitchPreferenceCompat switchPreferenceCompat = (SwitchPreferenceCompat) androidacyTestMode;
switchPreferenceCompat.setChecked(false);
// There's probably a better way to do this than duplicate code but I'm too lazy to figure it out
MainApplication.getSharedPreferences("mmm").edit().putBoolean("androidacy_test_mode", false).apply();
MainApplication.getPreferences("mmm").edit().putBoolean("androidacy_test_mode", false).apply();
}).show();
} else {
MainApplication.getSharedPreferences("mmm").edit().putBoolean("androidacy_test_mode", false).apply();
MainApplication.getPreferences("mmm").edit().putBoolean("androidacy_test_mode", false).apply();
// Show dialog to restart app with ok button
new MaterialAlertDialogBuilder(this.requireContext()).setTitle(R.string.warning).setCancelable(false).setMessage(R.string.androidacy_test_mode_disable_warning).setNeutralButton(android.R.string.ok, (dialog, which) -> {
// User clicked OK button
@ -1076,7 +1076,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
prefAndroidacyRepoApiD.setVisible(false);
}
}
String[] originalApiKeyRef = new String[]{MainApplication.getSharedPreferences("androidacy").getString("pref_androidacy_api_token", "")};
String[] originalApiKeyRef = new String[]{MainApplication.getPreferences("androidacy").getString("pref_androidacy_api_token", "")};
// Get the dummy pref_androidacy_repo_api_token preference with id pref_androidacy_repo_api_token
// we have to use the id because the key is different
EditTextPreference prefAndroidacyRepoApiKey = Objects.requireNonNull(findPreference("pref_androidacy_repo_api_token"));
@ -1122,7 +1122,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
new Thread(() -> {
// If key is empty, just remove it and change the text of the snack bar
if (apiKey.isEmpty()) {
MainApplication.getSharedPreferences("androidacy").edit().remove("pref_androidacy_api_token").apply();
MainApplication.getPreferences("androidacy").edit().remove("pref_androidacy_api_token").apply();
new Handler(Looper.getMainLooper()).post(() -> {
Snackbar.make(requireView(), R.string.api_key_removed, BaseTransientBottomBar.LENGTH_SHORT).show();
// Show dialog to restart app with ok button
@ -1146,7 +1146,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
new Handler(Looper.getMainLooper()).post(() -> {
Snackbar.make(requireView(), R.string.api_key_invalid, BaseTransientBottomBar.LENGTH_SHORT).show();
// Save the original key
MainApplication.getSharedPreferences("androidacy").edit().putString("pref_androidacy_api_token", originalApiKeyRef[0]).apply();
MainApplication.getPreferences("androidacy").edit().putString("pref_androidacy_api_token", originalApiKeyRef[0]).apply();
// Re-show the dialog with an error
prefAndroidacyRepoApiKey.performClick();
// Show error
@ -1167,7 +1167,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
if (valid) {
originalApiKeyRef[0] = apiKey;
RepoManager.getINSTANCE().getAndroidacyRepoData().setToken(apiKey);
MainApplication.getSharedPreferences("androidacy").edit().putString("pref_androidacy_api_token", apiKey).apply();
MainApplication.getPreferences("androidacy").edit().putString("pref_androidacy_api_token", apiKey).apply();
// Snackbar with success and restart button
new Handler(Looper.getMainLooper()).post(() -> {
Snackbar.make(requireView(), R.string.api_key_valid, BaseTransientBottomBar.LENGTH_SHORT).show();
@ -1286,7 +1286,6 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
builder.setView(input);
builder.setPositiveButton("OK", (dialog, which) -> {
String text = String.valueOf(input.getText());
text = text.trim();
// string should not be empty, start with https://, and not contain any spaces. http links are not allowed.
if (text.matches("^https://.*") && !text.contains(" ") && !text.isEmpty()) {
if (customRepoManager.canAddRepo(text)) {
@ -1314,7 +1313,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
});
builder.setNegativeButton("Cancel", (dialog, which) -> dialog.cancel());
builder.setNeutralButton("Docs", (dialog, which) -> {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/Androidacy/MagiskModuleManager/blob/master/docs/DEVELOPERS.md#custom-repo-format"));
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/Fox2Code/FoxMagiskModuleManager/blob/master/docs/DEVELOPERS.md#custom-repo-format"));
startActivity(intent);
});
AlertDialog alertDialog = builder.show();

@ -60,8 +60,8 @@ public class SentryMain {
android.os.Process.killProcess(android.os.Process.myPid());
});
// If first_launch pref is not false, refuse to initialize Sentry
SharedPreferences sharedPreferences = MainApplication.getSharedPreferences("mmm");
if (!Objects.equals(sharedPreferences.getString("last_shown_setup", null), "v2")) {
SharedPreferences sharedPreferences = MainApplication.getPreferences("mmm");
if (!Objects.equals(sharedPreferences.getString("last_shown_setup", null), "v1")) {
return;
}
sentryEnabled = sharedPreferences.getBoolean("pref_crash_reporting_enabled", false);

@ -42,11 +42,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="visible"
android:scaleY="2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:layout_constraintTop_toTopOf="@+id/root_container"
app:layout_constraintTop_toTopOf="@+id/swipe_refresh"
app:showAnimationBehavior="outward" />
<LinearLayout

@ -48,9 +48,8 @@
android:id="@+id/setup_scroll_down"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="2dp"
android:layout_marginVertical="4dp"
android:text="@string/setup_scroll_down_v2"
android:layout_margin="2dp"
android:text="@string/setup_scroll_down"
android:textAppearance="@style/TextAppearance.Material3.BodyMedium" />
<!-- Theme radio select. Options are system, light, dark, black, transparent_light -->
@ -285,26 +284,18 @@
android:text="@string/other_section"
android:textAppearance="@android:style/TextAppearance.Material.Headline" />
<com.google.android.material.materialswitch.MaterialSwitch
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:id="@+id/setup_agree_eula"
android:autoLink="web"
android:layout_marginHorizontal="2dp"
android:layout_marginVertical="4dp"
android:text="@string/eula_sum"
android:textColorLink="@color/blue"
android:text="@string/eula_agree"
android:textAppearance="@android:style/TextAppearance.Material.Small"
android:drawableStart="@drawable/baseline_library_add_check_24"
android:drawablePadding="8dp" />
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"
android:textColorLink="@color/blue"
android:text="@string/eula_agree_v2"
android:textAppearance="@android:style/TextAppearance.Material.Small" />
</LinearLayout>
</ScrollView>

@ -14,9 +14,9 @@
<com.google.android.material.card.MaterialCardView
android:id="@+id/card_view"
style="@style/Widget.Material3.CardView.Elevated"
style="?attr/materialCardViewElevatedStyle"
android:layout_width="match_parent"
android:padding="1dp"
android:padding="0dp"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout

@ -5,7 +5,6 @@
<item
android:id="@+id/cancel_setup"
android:checked="false"
android:enabled="true"
android:icon="@drawable/baseline_close_24"
android:title="@string/cancel"
app:showAsAction="ifRoom" />

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">فوكس مدير إضافات Magisk</string>
<string name="app_name">فوكس مدير إضافات ماجيستك</string>
<string name="fail_root_denied">تم رفض الوصول إلى الروت عبر تطبيق Magisk</string>
<string name="failed_download">فشل في تحميل الملف</string>
<string name="fail_root_magisk">تعذر الوصول إلى الروت أو Magisk</string>
@ -11,20 +11,20 @@
<string name="online_repo">الريبو متصل</string>
<string name="showcase_mode">التطبيق في وضع القفل</string>
<string name="fail_internet">فشل في الإتصال بالإنترنت</string>
<string name="custom_repo_always_on">تكون الريبوز المخصصة مفعلة دائما حتى تقوم بإزالتها.</string>
<string name="monet_disabled_summary">وضع Monet غير متوافق مع الخلفيات الشفافة.</string>
<string name="custom_repo_always_on">تكون الريبوات المخصصة مفعلة دائما حتى تقوم بإزالتها.</string>
<string name="monet_disabled_summary">Monet غير متوافق مع الخلفيات الشفافة.</string>
<string name="transparent_theme_dialogue_title">أنت تقوم بتعيين خلفية شفافة</string>
<string name="sentry_dialogue_title">عفوآ! يبدو أنه تم إغلاق التطبيق بطريقة غير متوقعة.</string>
<string name="name">الإسم</string>
<string name="email">البريد الإلكتروني</string>
<string name="additional_info">أخبرنا بماذا حدث</string>
<string name="sentry_dialogue_title">عفوا! يبدو أن التطبيق مغلق بشكل غير متوقع.</string>
<string name="name">الاسم</string>
<string name="email">بريدك الإلكتروني</string>
<string name="additional_info">أخبرنا ماذا حدث</string>
<string name="submit">إرسال</string>
<string name="sentry_dialogue_failed_toast">تعذر إرسال ملاحظات بسبب خطأ</string>
<string name="sentry_dialogue_success">تم إرسال الملاحظات بنجاح. سنراجعها قريباً</string>
<string name="sentry_dialogue_no_description">تعذر إرسال الملاحظات حيث أنه لم يتم تقديم أي وصف</string>
<string name="sentry_dialogue_success">تم إرسال الملاحظات بنجاح. سنراجعها قريبا</string>
<string name="sentry_dialogue_no_description">تعذر إرسال ملاحظات حيث أنه لم يتم تقديم أي وصف</string>
<string name="go_to_online_repo">قم بالتمرير إلى الريبو عبر الإنترنت</string>
<string name="official">رسمي</string>
<string name="unofficial">غير رسمي</string>
<string name="unofficial">غير رسميه</string>
<string name="setup_button">إنهاء الإعداد</string>
<string name="setup_background_update_check">التحقق من التحديث تلقائياً</string>
<string name="setup_androidacy_repo">تفعيل الريبو Androidacy</string>
@ -36,24 +36,24 @@
<string name="source_code_summary"><b>الالتزام</b> %1$s @ %2$s</string>
<string name="zip_load_failed">تعذر تحميل الملف zip</string>
<string name="androidacy_thanks">تم تطويره جزئيا بواسطة Androidacy</string>
<string name="pref_pkg_info_summary">الإصدار %1$s v%2$s (%3$d) | %4$s</string>
<string name="require_android_6">مطلوب Android 6.0 او أعلى</string>
<string name="pref_pkg_info_summary">%1$s v%2$s (%3$d) | %4$s البناء</string>
<string name="require_android_6">مطلوب Android 6.0 و أعلى</string>
<string name="module_last_update">اخر تحديث:</string>
<string name="module_needs_ramdisk_desc">‌هذه الإضافة تحتاج إلى تمهيد ramdisk للتثبيت</string>
<string name="manage_repos_pref">إدارة الريبوز</string>
<string name="manage_repos_pref">إدارة الريبوات</string>
<string name="pref_category_info">معلومات</string>
<string name="show_incompatible_desc">عرض الإضافات التي من غير المحتمل أن تعمل على جهازك بناءً على البيانات الوصفية الخاصة بها</string>
<string name="repo_main_alt">بديل ل Magisk-Modules-Repo مع قيود أقل.</string>
<string name="invalid_format">تحتوي الإضافة المحددة على تنسيق غير صالح</string>
<string name="substratum_builtin_module">الطبقة التحتية في الإضافة المدمجة</string>
<string name="file_picker_wierd">أرجع منتقي الملفات استجابة غير عادية.</string>
<string name="slow_modules">استغرقت الإضافات وقتاً طويلاً للتشغيل، أعد التفكير في تعطيل بعض الإضافات</string>
<string name="no_web_view">تعذر فتح عارض ويب النظام</string>
<string name="file_picker_wierd">أرجع منتقي الملفات استجابة غير قياسية.</string>
<string name="slow_modules">استغرقت الإضافات وقتاً طويلاً للتشغيل، فكر في تعطيل بعض الإضافات</string>
<string name="no_web_view">تعذر فتح عرض ويب النظام</string>
<string name="title_activity_settings">أنشطة الأعدادات</string>
<string name="app_update_available">يتوفر إصدار جديد من التطبيق</string>
<string name="app_update">تحديث التطبيق</string>
<string name="no_desc_found">لا يحتوي على وصف</string>
<string name="download_module">تنزيل الإضافة</string>
<string name="download_module">تحميل الإضافة</string>
<string name="install_module">تثبيت الإضافة</string>
<string name="update_module">تحديث الإضافة</string>
<string name="changelog">سجل التغييرات</string>
@ -63,16 +63,16 @@
<string name="update">تحديث</string>
<string name="install">تثبيت</string>
<string name="description">الوصف</string>
<string name="uninstall">إلغاء التثبيت</string>
<string name="uninstall">حذف</string>
<string name="config">تعديل</string>
<string name="favourite">تفضيل</string>
<string name="report_bugs">الإبلاغ عن أخطاء</string>
<string name="use_magisk_install_command_desc">أثناء الاختبار ، تسبب في حدوث مشكلات في أداة تشخيص خطأ تثبيت الإضافة ، لذلك يتم إخفاء هذا الخيار خلف وضع المطور.
\nقم بتشغيل هذا على مسؤوليتك الخاصة!</string>
<string name="use_magisk_install_command_desc">أثناء الاختبار، تسبب في حدوث مشكلات في أداة تشخيص أخطاء تثبيت الإضافة، لذلك يتم إخفاء هذا الخيار خلف وضع المطور.
\nقم بالتفعيل على مسؤوليتك الخاصة!</string>
<string name="sniffed_modules">إضافات مشتقة</string>
<string name="sniffing_modules">إضافات مستشقة</string>
<string name="submit_modules">رفع إضافة</string>
<string name="require_android_12">مطلوب Android 12 او أعلى</string>
<string name="require_android_12">مطلوب Android 12 و أعلى</string>
<string name="install_terminal_reboot_now">إعادة التشغيل</string>
<string name="language">اللغة</string>
<string name="module_repo">ريبو:</string>
@ -80,8 +80,8 @@
<string name="module_downloads">التنزيلات:</string>
<string name="module_stars">المفضلات:</string>
<string name="module_needs_ramdisk">يحتاج ramdisk</string>
<string name="module_can_change_boot">يستطيع تغيير وضع التشغيل</string>
<string name="module_can_change_boot_desc">هذه الإضافة قد تغير ملف التشغيل</string>
<string name="module_can_change_boot">يستطيع تغيير التمهيد</string>
<string name="module_can_change_boot_desc">هذه الإضافة قد تغير ملف التمهيد</string>
<string name="showcase_mode_pref">وضع القفل</string>
<string name="showcase_mode_desc">وضع القفل يمنع المدير من العبث بالإضافات</string>
<string name="prevent_reboot_pref">منع إعادة التشغيل</string>
@ -89,26 +89,26 @@
<string name="enable_monet">تفعيل Monet</string>
<string name="show_licenses">إظهار التراخيص</string>
<string name="licenses">التراخيص</string>
<string name="show_incompatible_pref">‌عرض الإضافات غير مدعومة</string>
<string name="show_incompatible_pref">‌عرض الإضافات الغير مدعومة</string>
<string name="magisk_outdated">هناك إصدار جديد من Magisk للتثبيت!</string>
<string name="pref_category_security">الأمان</string>
<string name="pref_category_appearance">المظهر</string>
<string name="pref_category_general">عام</string>
<string name="repo_main_desc">الريبو يقوم بتخزين إضافات Magisk</string>
<string name="repo_main_desc">الريبو الذي يخزن إضافات Magisk</string>
<string name="master_delete">حذف ملفات الإضافة؟</string>
<string name="master_delete_no">حفظ</string>
<string name="master_delete_no">احتفظ</string>
<string name="master_delete_yes">حذف</string>
<string name="master_delete_fail">تعذر حذف ملفات الإضافة</string>
<string name="module_id_prefix">معرف الإضافة:</string>
<string name="install_from_storage">تثبيت الإضافة من مساحة التخزين</string>
<string name="install_from_storage">تثبيت الإضافة من مساحة التحزين</string>
<string name="low_quality_module">إضافة منخفضة الجودة</string>
<string name="local_install_title">تثبيت محلي</string>
<string name="magisk_builtin_module">إضافة Magisk المدمجة</string>
<string name="module_min_magisk_chip">الإصدار الأدنى المطلوب من Magisk هو %s</string>
<string name="module_min_sdk_chip">الإصدار الأدنى المطلوب من Android</string>
<string name="module_max_sdk_chip">الإصدار الأقصى من Android</string>
<string name="prevent_reboot_desc">منع عمليات إعادة التشغيل غير متوقعة</string>
<string name="pref_category_repos">ريبوز</string>
<string name="module_min_magisk_chip">اصدار Magisk الأدنى هو %s</string>
<string name="module_min_sdk_chip">اصدار Android. المطلوب</string>
<string name="module_max_sdk_chip">اصدار Android. الموصى</string>
<string name="prevent_reboot_desc">يمنع عمليات إعادة التشغيل غير متوقعة</string>
<string name="pref_category_repos">ريبوات</string>
<string name="theme_pref">خلفية</string>
<string name="theme_mode_pref">وضع الخلفية</string>
<string name="source_code">المصدر الرقمي</string>
@ -120,63 +120,63 @@
<string name="force_english_pref">لغة التطبيق باللغة الإنجليزية</string>
<string name="disable_low_quality_module_filter_pref">عرض إضافات منخفضة الجودة</string>
<string name="dns_over_https_pref">DNS عبر HTTPS</string>
<string name="dns_over_https_desc">قد يصلح مشكلات الإتصال في بعض الحالات. (لا ينطبق على عارض الويب.)</string>
<string name="disable_extensions_desc">إغلاق ملحقات مدير إضافات Magisk، مما يمنع الإضافات من استخدام ملحقات شاشة الأوامر.
\nمفيد إذا أساءت الوحدة استخدام ملحقات مدير إضافات Magisk.</string>
<string name="wrap_text_pref">تغطية النص</string>
<string name="disable_chips_in_description">تعطيل الرقاقات في الوصف</string>
<string name="repo_enabled">الريبو مفعل</string>
<string name="repo_disabled">الريبو مغلق</string>
<string name="add_repo">إضافة ريبو</string>
<string name="dns_over_https_desc">قد يصلح مشكلات الاتصالات في بعض الحالات. (لا ينطبق على WebView.)</string>
<string name="disable_extensions_desc">قم بإيقاف تشغيل ملحقات Fox\'s Mmm ، مما يمنع الإضافات من استخدام ملحقات شاشة الأوامر الطرفية.
\nمفيد إذا كانت الإضافة تسيء استخدام ملحقات Fox\'s Mmm.</string>
<string name="wrap_text_pref">التفاف النص</string>
<string name="disable_chips_in_description">تعطيل الرقائق في الوصف</string>
<string name="repo_enabled">ريبو مفعل</string>
<string name="repo_disabled">ريبو مقفل</string>
<string name="add_repo">اضافة ريبو</string>
<string name="remove_repo">حذف ريبو</string>
<string name="custom_url">عنوان URL مخصص</string>
<string name="custom_url">عنوان مخصص</string>
<string name="restore_module_list">استرجاع الإضافات</string>
<string name="require_internet">هذه العملية تتطلب اتصال بالإنترنت</string>
<string name="androidacy_test_mode_pref">وضع اختبار Androidacy</string>
<string name="notification_update_title">تم العثور على تحديث للإضافة %1$d</string>
<string name="notification_update_title_easter_egg">تحديث إضافة %i مشتق</string>
<string name="androidacy_test_mode_pref">وضع الاختبار Androidacy</string>
<string name="notification_update_title">‫تم العثور على تحديثات الإضافة %1$d</string>
<string name="notification_update_title_easter_egg">استنشاق تحديثات الإضافة %i</string>
<string name="notification_update_subtitle">انقر لفتح التطبيق</string>
<string name="notification_update_debug_pref">إشعار للاختبار</string>
<string name="disable_extensions_pref">لا MMM</string>
<string name="crash_reporting">الإبلاغ تلقائياً عن الأخطاء والأداء للمطورين</string>
<string name="api_key_set">مفتاح API الخاص ب Androidacy الحالي</string>
<string name="api_key">مفتاح API ل Androidacy</string>
<string name="api_key_not_set">مفتاح API الخاص ب Androidacy فارغ</string>
<string name="force_dark_terminal_title">شاشة الأوامر بمظهر داكن</string>
<string name="enable_blur_pref">وضع التمويه</string>
<string name="notification_update_debug_pref">إشعار الاختبار</string>
<string name="disable_extensions_pref">لا Mmm</string>
<string name="crash_reporting">الإبلاغ تلقائيا عن الأخطاء والأداء للمطورين</string>
<string name="api_key_set">مفتاح API الخاص بتطبيق Androidacy الحالي</string>
<string name="api_key">مفتاح API للتطبيق Androidacy</string>
<string name="api_key_not_set">مفتاح API الخاص بتطبيق Androidacy فارغ</string>
<string name="force_dark_terminal_title">شاشة الأوامر داكن</string>
<string name="enable_blur_pref">التمويه</string>
<string name="link_copied">تم نسخ الرابط</string>
<string name="backup_module_list">نسخ احتياطي للأضافات</string>
<string name="notification_update_pref">التحقق تلقائياً من الإضافات</string>
<string name="notification_update_pref">التحقق من التحديث التلقائي للأضافات</string>
<string name="language_translated_by">تُرجِم بواسطة Fox2Code (@BN_LOS)</string>
<string name="api_key_invalid">تعذر التحقق من صحة مفتاح API. يرجى التحقق من المفتاح و إعادة المحاولة مرة أخرى.</string>
<string name="api_key_invalid">تعذر التحقق من صحة مفتاح API. يرجى التحقق من ذلك والمحاولة مرة أخرى.</string>
<string name="checking_api_key">التحقق من صحة مفتاح API …</string>
<string name="please_wait">الرجاء الانتظار</string>
<string name="save_api_key">التحقق</string>
<string name="warning">تحذير!</string>
<string name="crash">زرع خطأ للاختبار</string>
<string name="repackaged_as">تمت تعبئتها على النحو التالي:</string>
<string name="wrapped_from">مغطاة من:</string>
<string name="crash">تعطل التطبيق للاختبار</string>
<string name="repackaged_as">أعيد تعبئتها على النحو التالي:</string>
<string name="wrapped_from">ملفوفة من:</string>
<string name="crash_reporting_restart_title">إعادة تشغيل التطبيق لتطبيق التغييرات؟</string>
<string name="crash_reporting_restart_message">يحتاج التطبيق إلى إعادة التشغيل لتطبيق هذا الإعداد</string>
<string name="restart">إعادة التشغيل</string>
<string name="androidacy_failed_to_parse_token">تعذر استرداد التوكن من Androidacy. يرجى إعادة المحاولة لاحقا.</string>
<string name="androidacy_failed_to_parse_token">تعذر استرداد الرمز المميز من Androidacy. يرجى إعادة المحاولة لاحقا.</string>
<string name="androidacy_server_down">غير قادر على الاتصال بخادم Androidacy. تحقق من اتصالك وحاول مرة أخرى.</string>
<string name="androidacy_need_captcha">تم حظر تحديث Androidacy بواسطة Captcha</string>
<string name="api_key_restart">تم تغيير مفتاح API. أعد تشغيل التطبيق لتطبيق التغييرات.</string>
<string name="permission_notification_title">السماح بالإشعارات؟</string>
<string name="permission_notification_title">هل تسمح بالإشعارات؟</string>
<string name="permission_notification_grant">منح الإذن</string>
<string name="background_update_check_permission_required">يرجى تفعيل الإشعارات لتفعيل هذا الخيار.</string>
<string name="dont_ask_again">لا تسأل مرة أخرى</string>
<string name="force_black_theme_desc">فرض خلفيات AMOLED السوداء عند استخدام المظهر الداكن. يرجى الانتباه إلى أن هذا قد يكون به مشاكل تباين مع بعض سمات الألوان.</string>
<string name="force_black_theme_pref">فرض خلفية اللون الأسود</string>
<string name="androidacy_repo_disabled">هذا الريبو معطل حالياً</string>
<string name="force_black_theme_desc">يفرض خلفيات AMOLED السوداء عند استخدام المظهر الداكن. يرجى الانتباه إلى أن هذا قد يكون به مشاكل تباين مع بعض سمات الألوان.</string>
<string name="force_black_theme_pref">فرض اللون الأسود</string>
<string name="androidacy_repo_disabled">هذا الريبو معطل حاليا</string>
<string name="download_full_app">تحميل النسخة الكاملة</string>
<string name="api_key_valid">مفتاح API صحيح.</string>
<string name="api_key_removed">تم إعادة تعيين مفتاح API بنجاح</string>
<string name="repo_update_failed">فشل تحديث بعض الريبوز</string>
<string name="repo_update_failed">فشل تحديث بعض الريبوات</string>
<string name="disable_low_quality_module_filter_desc">لا تعلن بعض الإضافات عن بياناتها الوصفية بشكل صحيح ، مما يتسبب في حدوث خلل مرئي و / أو يشير إلى جودة الإضافة الرديئة.
\nقم بإيقاف تشغيل هذا الخيار على مسؤوليتك الخاصة!</string>
<string name="wrap_text_desc">إظهار النصوص على أسطر متعددة بدلا من وضع كل نص على نفس السطر عند تثبيت الإضافة.</string>
<string name="wrap_text_desc">إظهار النص على أسطر متعددة بدلا من وضع كل النص على نفس السطر عند تثبيت الإضافة.</string>
<string name="androidacy_test_mode_desc">استخدم نقطة نهاية Androidacy المرحلية بدلا من نقطة نهاية الإصدار. (سيتم إعادة تشغيل التطبيق)</string>
<string name="install_terminal_reboot_now_message">أنت على وشك إعادة تشغيل جهازك. إذا قمت بحفظ عملك ، فاضغط على موافق للمتابعة. خلاف ذلك ، اضغط على إلغاء.</string>
<string name="install_terminal_config_missing">الحزمة %s مفقودة لتعديل الإضافة، لذلك لا يمكننا تشغيلها.</string>
@ -185,19 +185,19 @@
<string name="clear_data_dialogue_message">أنت على وشك مسح بيانات التطبيق. يرجى تأكيد هذا الإجراء.</string>
<string name="notification_update_desc">قد يزيد من استخدام البطارية</string>
<string name="language_support_outdated">بعض الترجمات للغة الحالية ليست محدثة ، يرجى التفكير في المساهمة في ترجمات التطبيق على GitHub</string>
<string name="crash_reporting_desc">إذا قمت بتعطيل هذا ، فلن يحصل المطور على تقارير الأخطاء تلقائياً، وقد يؤدي ذلك إلى صعوبة استكشاف الأخطاء وإصلاحها</string>
<string name="api_key_summary">استخدم مفتاح API مخصص ل Androidacy. مفيد للمشتركين المميزين ، لإزالة الإعلانات والمزيد.</string>
<string name="androidacy_test_mode_warning">أنت تقوم بإعداد التطبيق لاستخدام نقطة نهاية غير إنتاجية ل Androidacy. قد يؤدي هذا إلى عدم استقرار التطبيق والفشل في تحميل الريبو عبر الإنترنت. لا تبلغ عن الأخطاء إذا كان هذا المفتاح مفعل. سيتم إعادة تشغيل التطبيق لإعادة تحميل الريبو.</string>
<string name="crash_reporting_desc">إذا قمت بتعطيل هذا ، فلن يحصل المطور على تقارير الأخطاء التلقائية ، وقد يؤدي ذلك إلى صعوبة استكشاف الأخطاء وإصلاحها</string>
<string name="api_key_summary">استخدم مفتاح API مخصصا لتطبيق Androidacy. مفيد للمشتركين المميزين ، لإزالة الإعلانات والمزيد.</string>
<string name="androidacy_test_mode_warning">أنت تقوم بإعداد التطبيق لاستخدام نقطة نهاية غير إنتاجية لنظام Androidacy. قد يؤدي هذا إلى عدم استقرار التطبيق والفشل في تحميل الريبو عبر الإنترنت. لا تبلغ عن الأخطاء إذا كان لديك هذا المفتاح. سيتم إعادة تشغيل التطبيق لإعادة تحميل الريبو.</string>
<string name="androidacy_test_mode_disable_warning">سيتم إعادة تشغيل التطبيق لتعطيل نقطة النهاية المرحلية</string>
<string name="androidacy_failed_to_validate_token">تعذر التحقق من صحة التوكن ل Androidacy. يرجى إعادة المحاولة لاحقا.</string>
<string name="api_key_unchanged">مفتاح API الذي أدخلته نفسه المستخدم حالياً.</string>
<string name="permission_notification_message">نحتاج إلى إذن الإشعارات لإعلامك بتحديثات التطبيق و الإضافات. إذا لم تمنح هذا الإذن، فلن يتم تشغيل عمليات التحقق من التحديث تلقائياً.</string>
<string name="androidacy_repo_disabled_message">يفتقد هذا الإصدار إلى مفاتيح العميل لريبو Androidacy. يرجى تنزيل إصدار GitHub إذا كنت ترغب في الاستفادة من ميزات مثل مراجعات الإضافة وفحوصات الأمان التلقائية والمزيد.</string>
<string name="repo_update_failed_extended">فشل تحديث %1$s. يرجى إعادة المحاولة لاحقاً.</string>
<string name="blur_disabled_summary">وضع التمويه غير متوافق مع الخلفيات الشفافة.</string>
<string name="androidacy_failed_to_validate_token">تعذر التحقق من صحة الرمز المميز لنظام Androidacy. يرجى إعادة المحاولة لاحقا.</string>
<string name="api_key_unchanged">مفتاح API الذي تدخله هو نفسه المفتاح المستخدم بالفعل.</string>
<string name="permission_notification_message">نحتاج إلى إذن الإشعارات لإعلامك بتحديثات التطبيق و الإضافات. إذا لم تمنح هذا الإذن، فلن يتم تشغيل عمليات التحقق من التحديث التلقائي.</string>
<string name="androidacy_repo_disabled_message">يفتقد هذا الإصدار إلى مفاتيح العميل لنظام Androidacy Repo. يرجى تنزيل إصدار GitHub إذا كنت ترغب في الاستفادة من ميزات مثل مراجعات الإضافات وفحوصات الأمان التلقائية والمزيد.</string>
<string name="repo_update_failed_extended">فشل تحديث %1$s. يرجى إعادة المحاولة لاحقا.</string>
<string name="blur_disabled_summary">التمويه غير متوافق مع الخلفيات الشفافة.</string>
<string name="setup_androidacy_repo_summary">يتميز بمراجعات المستخدمين ، والمسح التلقائي للفيروسات ، والتحديثات السريعة ، ومجموعة واسعة ، وهو مدعوم من Androidacy.</string>
<string name="setup_magisk_alt_repo">تفعيل Magisk Alt Repo</string>
<string name="setup_crash_reporting_summary">الإبلاغ عن الأعطال ومراقبة الأداء. جميع التقارير مجهولة وسرية تماما.</string>
<string name="setup_crash_reporting_summary">الإبلاغ عن الأعطال ومراقبة الأداء. جميع التقارير مجهولة المصدر وسرية.</string>
<string name="setup_custom_repos">يمكنك إضافة ريبوات مخصصة لاحقا في الإعدادات.</string>
<string name="repos">ريبوات</string>
<string name="misc">متنوعه</string>
@ -205,24 +205,24 @@
<string name="low_performance_device_dialogue_title">تفعيل التمويه على الجهاز الضعيف</string>
<string name="low_performance_device_dialogue_message">أنت تحاول تفعيل التمويه على جهاز قد لا يعمل بشكل جيد معه.
\nيمكنك تفعيله، ولكن قد يؤدي ذلك إلى تجربة مستخدم سيئة ونوصيك بعدم القيام بذلك.</string>
<string name="alt_repo_info">يحتوي هذا الريبو على قيود ومراجعات أقل ، مما قد يؤدي إلى إضافات ذات جودة أقل. جودة أقل و لكن تملك الكثير من الإضافات.</string>
<string name="alt_repo_info">يحتوي هذا الريبو على قيود ومراجعات أقل ، مما قد يؤدي إلى إضافات أقل جودة. مجردة جدا ولكن لديها الكثير من الإضافات.</string>
<string name="debug_build">هذا هو البناء التصحيحي. توقع بعض الأخطاء و أداء سيئ.</string>
<string name="magisk_alt_repo_name">ريبو Magisk Alt</string>
<string name="androidacy_repo_name">ريبو Androidacy</string>
<string name="repo_enabled_changed">لقد مكنت أو عطلت الريبو. يرجى تحديث قائمة الإضافات أو إعادة تشغيل التطبيق.</string>
<string name="finish">أنهاء</string>
<string name="transparent_theme_dialogue_message">قد تحتوي السمات الشفافة على بعض التناقضات وقد لا تعمل على جميع الرومات. بالإضافة إلى ذلك ، سيتم تعطيل وضع Monet و وضع التمويه. يمكنك التغيير مرة أخرى في أي وقت.</string>
<string name="transparent_theme_dialogue_message">قد تحتوي الخلفيات الشفافة على بعض التناقضات وقد لا تعمل على جميع الرومات. بالإضافة إلى ذلك ، سيتم تعطيل monet و التمويه. يمكنك التغيير مرة أخرى في أي وقت.</string>
<string name="sentry_dialogue_message">واجهنا خطأ! الرجاء مساعدتنا في تحسين التطبيق عن طريق إضافة بعض المعلومات حول الخطأ أدناه.
\nالاسم والبريد الإلكتروني اختيارية لكن سيسمح لنا بالاتصال بك إذا لزم الأمر للحصول على مزيد من المعلومات.</string>
<string name="setup_title">الإعداد الأول</string>
<string name="setup_title">الإعداد لأول مرة</string>
<string name="setup_message">أهلًا وسهلًا! سيساعدك هذا التطبيق على تثبيت وإدارة إضافات Magisk. للبدء ، يرجى تحديد الخيارات أدناه. يمكن تعديل هذه وأكثر من الإعدادات لاحقا.</string>
<string name="setup_background_update_check_summary">اسمح لنا بالتحقق من تحديثات الإضافة والتطبيق في الخلفية. قد تستخدم هذه الميزة المزيد من البطارية والبيانات.</string>
<string name="setup_magisk_alt_repo_summary">أكثر تراخيا بكثير من الأصل. يملك الكثير من الإضافات على حساب بعض الأمان.</string>
<string name="setup_magisk_alt_repo_summary">أكثر تراخيا بكثير من الأصل. لديها الكثير من الإضافات على حساب بعض الأمان.</string>
<string name="androidacy_update_needed_message">يرجى تحديث التطبيق إلى أحدث إصدار.</string>
<string name="no_file_provided">لم يتم توفير أي ملف عند محاولة فتح zip.</string>
<string name="androidacy_thanks_desc">صيحة ضخمة ل Androidacy لتكاملها ومساهماتها في التطبيق.</string>
<string name="contributors">وبالطبع ، شكرا لجميع المساهمين لدينا ، سواء كانت ترجمات أو تعليمات برمجية أو مجرد متعة التسكع معها! نحن نحبكم جميعا.</string>
<string name="app_name_short">Fox\'s MMM</string>
<string name="app_name_short">فوكس مدير إضافات Magisk</string>
<string name="setup_theme_black">خلفية AMOLED سوداء</string>
<string name="setup_theme_transparent_light">خلفية فاتحة شفافة - سيتم تعطيل MONET والتمويه!</string>
<string name="setup_theme_button">اختر خلفية</string>
@ -238,7 +238,7 @@
<string name="theme_transparent_light">فاتح (شفافية)</string>
<string name="theme_light">فاتح</string>
<string name="validating_api_key">التحقق من صحة مفتاح API …</string>
<string name="androidacy_repo_info">قد يعرض هذا الريبو بعض الإعلانات غير المتطفلة لتغطية تكاليف الخادم والتطوير. ميزات المراجعات والفحص التلقائي للفيروسات والمزيد.</string>
<string name="androidacy_repo_info">قد يعرض الريبو هذا بعض الإعلانات غير المتطفلة لتغطية تكاليف الخادم والتطوير. يتميز بالمراجعات والمسح التلقائي للفيروسات والمزيد.</string>
<string name="zip_security_warning">تثبيت %s ؟</string>
<string name="zip_unpacking">يتم فحص الإضافة…</string>
<string name="understand">أعي ذلك</string>
@ -378,9 +378,4 @@
<string name="language_not_available">لم تتم ترجمة اللغة %s. أتود ترجمتها ؟</string>
<string name="blur_desc">إنشاء تأثير تمويه خلف بعض الحوارات والعناصر. لاحظ أن التمويه قد لا يعمل بشكل جيد على بعض الأجهزة وقد لا يعمل مع الجميع.</string>
<string name="error_encrypted_shared_preferences">حدث خطأ أثناء قراءة الخصائص المشتركة. الرجاء إعادة تعيين التطبيق.</string>
<string name="donate_fox">تبرع ل Fox2Code</string>
<string name="donate_androidacy">تبرع ل Androidacy</string>
<string name="donate_androidacy_sum">اشتر اشتراكا مميزا في Androidacy لدعم التطبيق والريبو.</string>
<string name="promo_code_copied">استخدم الرمز المنسوخ لنصف شهرك الأول!</string>
<string name="warning_pls_restart">يرجى الملاحظة أن بعض الإعدادات قد لا تظهر الإجراء الخاص بها حتى تقوم بإعادة تشغيل التطبيق.</string>
</resources>

@ -70,7 +70,10 @@
<string name="dev_mode_enabled">Povolen režim pro vývojáře</string>
<string name="force_english_pref">Vynutit Angličtinu</string>
<string name="disable_low_quality_module_filter_pref">Zakázat filter nekvalitních modulov</string>
<string name="disable_low_quality_module_filter_desc">Některé moduly deklarují svá metadata nesprávně, co může spůsobit závady zobrazení, nebo ukazují nízkou kvalitu modulu, povolte to jen na vlastní riziko!</string>
<string name="disable_low_quality_module_filter_desc">
Některé moduly deklarují svá metadata nesprávně, co může spůsobit závady zobrazení, nebo ukazují nízkou kvalitu modulu,
zakažte to jen na vlastní riziko!
</string>
<string name="dns_over_https_pref">Dns přes https</string>
<string name="dns_over_https_desc">
V některých případech může opravit problémy s připojením.
@ -122,9 +125,9 @@
<string name="link_copied">Odkaz zkopírován</string>
<string name="require_internet">Tahle operace vyžaduje připojení k internetu</string>
<string name="androidacy_test_mode_pref">Testovací režim Androidacy</string>
<string name="notification_update_title">Nalezeno %1$d aktualizací modulů</string>
<string name="notification_update_title">Nalezeno %i aktualizací modulů</string>
<string name="notification_update_subtitle">Pro spuštění app klikněte</string>
<string name="notification_update_pref">Automaticky kontrolovat aktualizace modulů</string>
<string name="notification_update_pref">Kontrola aktualizace modulů na pozadí</string>
<string name="notification_update_desc">Může zvýšit spotřebu baterie</string>
<string name="notification_update_debug_pref">Zkouška upozornění</string>
<string name="language_translated_by">Translated by PhSnake</string>
@ -142,7 +145,7 @@
<string name="api_key_restart">Klíč API byl změnen. Pro použití změn restartujte app.</string>
<string name="api_key_unchanged">Klíč API který jste zadal je stejný jako ten co se používá teď.</string>
<string name="permission_notification_title">Povolit upozornění\?</string>
<string name="permission_notification_message">Potřebujeme oprávnění k oznámení, abychom vás mohli upozornit na aktualizace aplikací a modulů. Pokud toto oprávnění neudělíte, automatické kontroly aktualizací nepoběží.</string>
<string name="permission_notification_message">Potřebujeme oprávnění k oznámení, abychom vás mohli upozornit na aktualizace aplikací a modulů. Pokud toto oprávnění neudělíte, kontroly aktualizací na pozadí nepoběží.</string>
<string name="dont_ask_again">Neptejte se znovu</string>
<string name="force_black_theme_desc">Vynutit černé pozadí AMOLED při použití tmavého motivu. U některých barevných motivů může docházet k problémům s kontrastem.</string>
<string name="force_black_theme_pref">Vynutit černý motiv</string>
@ -173,7 +176,7 @@
<string name="monet_disabled_summary">Monet není kompatibilní s průhlednými motivy.</string>
<string name="blur_disabled_summary">Blur není kompatibilní s průhlednými motivy.</string>
<string name="transparent_theme_dialogue_title">Nastavujete průhledný motiv</string>
<string name="transparent_theme_dialogue_message">Průhledné motivy nemusí být plně konzistentní a nemusí fungovat na všech ROM. Navíc budou Monet a Blur deaktivovány. Můžete to kdykoliv vrátit.</string>
<string name="transparent_theme_dialogue_message">Průhledné motivy nemusí být plně konzistentní a nemusí fungovat na všech ROM. Monet a Blur budou deaktivovány. Můžete to kdykoliv vrátit.</string>
<string name="custom_repo_always_on">Vlastní repozitáře jsou vždy zapnuty dokud je nesmažete.</string>
<string name="sentry_dialogue_message">Vyskytla se chyba! Pomozte nám vylepšit aplikaci sdělením některých informací o chybě.
\nJméno a email nejsou povinné, ale umožní nám Vás kontaktovat jestli by jsme potřebovali víc informací.</string>
@ -189,7 +192,7 @@
<string name="setup_message">Vítejte! Tato aplikace vám pomůže nainstalovat a spravovat moduly Magisk. Chcete-li začít, vyberte níže uvedené možnosti. Tyto a další lze konfigurovat z nastavení později.</string>
<string name="setup_button">Dokončit nastavení</string>
<string name="api_key">API klíč Androidacy</string>
<string name="setup_background_update_check">Automatická kontrola aktualizací</string>
<string name="setup_background_update_check">Kontrola aktualizací na pozadí</string>
<string name="official">Oficiální</string>
<string name="unofficial">Neoficiální</string>
<string name="androidacy_webview_update_required">Váš webview je zastaralý. Aktualizujte jej prosím.</string>
@ -240,123 +243,4 @@
<string name="setup_title">První instalace</string>
<string name="notification_update_title_easter_egg">Nalezeno %i aktualizovatelných modulů</string>
<string name="pref_pkg_info_summary">%1$s v%2$s (%3$d) | %4$s Build</string>
<string name="zip_prop_load_failed">Nelze načíst vlastnosti modulu</string>
<string name="language_cta">Nevidíte Váš jazyk\?</string>
<string name="language_cta_desc">Pomozte nám s prekladem! Klikněte zde pro víc informací.</string>
<string name="source_code_summary"><b>Odeslat</b>%1$s@%2$s</string>
<string name="no_file_provided">Při otevírání zip-u se nepovedlo nalézt žádný soubor.</string>
<string name="zip_load_failed">Soubor zip se nedá načíst</string>
<string name="androidacy_thanks">Částečně vyvinutý společností Androidacy</string>
<string name="pref_category_contributors">Přispívatelé</string>
<string name="fox2code_thanks_desc">Fox2Code je původním tvůrcem aplikace. Bez něj by to nikdy nebylo možné.</string>
<string name="fox2code_thanks">Vytvořil Fox2Code</string>
<string name="save_logs">Ukládat protokoly do úložiště a sdílet je</string>
<string name="error_saving_logs">Protokoly se nedají uložit</string>
<string name="share_logs">Sdílet protokoly FoxMMM</string>
<string name="keep_tapping_to_enter_hogwarts">Pokračujte v klikání, aby vás přijali do Bradavic!</string>
<string name="modules">Moduly</string>
<string name="search">Hledat</string>
<string name="error_no_extras">ERROR: Chybná data při spuštění</string>
<string name="update_debug_warning">Zdá se, že spouštíte debug sestavení. Debug sestavení musíte aktualizovat ručně a aktualizace v aplikaci nejsou podporováný</string>
<string name="error_no_action">CHYBA: Byla zadána neplatná akce. Nebude se pokračovat.</string>
<string name="update_available">Nalezena aktualizace</string>
<string name="checking_for_update">Kontrola aktualizací…</string>
<string name="no_update_available">Používáte nejnovější verzi!</string>
<string name="download_update">Stáhnout aktualizaci</string>
<string name="error_no_asset">CHYBA: Nepovedlo se analyzovat informace o aktualizaci</string>
<string name="downloading_update">Stahování aktualizace...%1$d%%</string>
<string name="installing_update">Aktualizace se instaluje…</string>
<string name="no_file_found">ERROR: Nelze najít aktualizační balíček.</string>
<string name="check_for_updates">Skontrolovat aktualizace aplikace</string>
<string name="update_debug_download_pref">Testovat mechanismus stahování aktualizací</string>
<string name="not_official_build">Tato aplikace není oficiální build FoxMMM.</string>
<string name="repo_update_failed_message">Následující repozitáře se nepovedlo aktualizovat:
\n
\n%s</string>
<string name="reset_api_key">Obnovení klíčů API</string>
<string name="upgrade_androidacy_promo">Upgrade na prémiovou verzi</string>
<string name="upgrade_androidacy_promo_desc">Přechodem na prémiovou verzi odstraníte reklamy, CAPTCHA a stahování pro úložiště Androidacy a podpoříte Androidacy a autory modulů.</string>
<string name="crash_text">Uh-oh, narazili jsme na zádrhel!</string>
<string name="feedback_message">Řekněte nám více podrobností o tom, co jste dělali, když se to stalo. Čím více tím lépe!</string>
<string name="feedback_submit">Odeslat a restartovat</string>
<string name="please_feedback">Pomozte nám prosím tím, že nám řekněte, co jste se snažili udělat, když se to stalo.</string>
<string name="sentry_dialogue_disabled">Hlášení o pádu je zakázáno. Chcete-li odeslat zpětnou vazbu, povolte ji.</string>
<string name="feedback_name">Název (volitelné)</string>
<string name="feedback_email">Email (volitelné)</string>
<string name="sentry_dialogue_empty_message">Nezadali jste doplňující zpětnou vazbu.</string>
<string name="crash_icon">Ikona pádu</string>
<string name="copy_button">Kopírovat text</string>
<string name="crash_details">Neznámá příčina</string>
<string name="more_details">Více podrobností níže.</string>
<string name="crash_details_copied">Stacktrace zkopírován do schránky!</string>
<string name="crash_full_stacktrace">Stacktrace:
\n%1$s</string>
<string name="sentry_enable_nag">Vypadá to, že hlášení o selhání je zakázáno. Chcete-li odeslat zpětnou vazbu, povolte jej.</string>
<string name="reset_app">Resetovat aplikaci</string>
<string name="upgraded_summary">Jste fakt úžasný! Zdá se, že jste své předplatné již upgradovali a podporujete Androidacy.</string>
<string name="upgraded">Premium aktivní</string>
<string name="reset_warning">Pokud se vám tato obrazovka stále zobrazuje, může pomoci resetování aplikace. To vymaže data aplikace, ale neovlivní to nainstalované moduly.</string>
<string name="reset">Reset</string>
<string name="reset_app_confirmation">Tím dojde k úplnému vymazání dat aplikace, ale neovlivní to moduly.</string>
<string name="error_adding">Přidání vlastního repozitáře selhalo</string>
<string name="api_key_mismatch">Klíč API je ve nesprávném formátu</string>
<string name="theme_transparent_dark">Tmavý (průhledný)</string>
<string name="zip_security_warning">Nainstalovat %s\?</string>
<string name="contributors">A samozřejmě děkujeme všem našim přispěvatelům, ať už se jedná o překlady, kód, nebo jen o zábavu! Máme vás všechny rádi.</string>
<string name="zip_unpacking">Kontrola modulu…</string>
<string name="warning_message">Tento modul má indikátory, že mohl být nainstalován bez vašeho vědomí nebo se může pokoušet skrýt.
\n
\nDůrazně doporučujeme odinstalovat.</string>
<string name="understand">Rozumím</string>
<string name="setup_theme_title">Zvolte motiv</string>
<string name="setup_language_button">Zvolte jazyk</string>
<string name="title_activity_setup">Průvodce nastavením</string>
<string name="action_settings">Nastavení</string>
<string name="notification_update_ignore_desc">Seznam modulů, které mají být vyloučeny z kontrol aktualizací</string>
<string name="notification_update_ignore_pref">Vyloučit moduly</string>
<string name="pref_category_updates">Aktualizace</string>
<string name="invalid_excludes">Neplatný vstup</string>
<string name="invalid_characters_message">Zadaný seznam modulů je neplatný. Zadejte prosím pouze platné ID modulů oddělené čárkami</string>
<string name="background_update_check_excludes">Moduly, které mají být vyloučeny z automatických kontrol aktualizací</string>
<string name="title_activity_update">In-app Updater</string>
<string name="update_title">Aktualizovat aplikaci</string>
<string name="changelog_none">Zatím žádné změny!</string>
<string name="update_cancel_button">Storno aktualizace</string>
<string name="invalid_repo_url">Zadané URL repozitáře je neplatné</string>
<string name="add_repo_message">Repozitáře musí být poskytována přes HTTPS a musí splňovat specifikace uvedené v dokumentaci.</string>
<string name="notification_update_summary">Následující moduly mohou být aktualizovány:</string>
<string name="notification_update_module_template">%1$s na verzi %2$s</string>
<string name="notification_channel_background_update_description">FoxMMM kontroluje aktualizace na pozadí.</string>
<string name="notification_channel_category_background_update">Stav aktualizací na pozadí</string>
<string name="notification_channel_category_background_update_description">Zobrazuje upozornění při kontrole aktualizací, aby je systém nezabil</string>
<string name="notification_update_wifi_desc">Kontrolovat pouze přes WiFi</string>
<string name="notification_update_wifi_pref">Vyžadovat WiFi nebo neměřenou síť pro kontrolu aktualizací. Máte-li omezená mobilní data, doporučujeme nechat zapnuté.</string>
<string name="background_update_check_excludes_no_modules">Na zařízení nejsou instalovány žádné moduly</string>
<string name="auto_updates_notifs">Upozornit, jsou-li nalezeny aktualizace modulu</string>
<string name="notification_group_updates">Aktualizace</string>
<string name="online">Online</string>
<string name="safe">Bezpečný</string>
<string name="safe_module">Ověřen bezpečný modul</string>
<string name="safe_message">Tento modul byl úložištěm ověřen jako bezpečný, což znamená, že splňuje určité limity kvality a bezpečnosti a je kontrolován na přítomnost malwaru.</string>
<string name="notification_update_app_desc">Povolit automatickou kontrolu aktualizací aplikací. Aktualizace se nebudou stahovat automaticky.</string>
<string name="notification_update_app_pref">Skontrolovat aktualizace aplikace</string>
<string name="notification_channel_category_app_update">Aktualizace aplikace</string>
<string name="notification_channel_category_app_update_description">Upozornit je-li dostupná aktualizace aplikace</string>
<string name="notification_channel_background_update_app">Je dostupná aktualizace aplikace!</string>
<string name="notification_channel_background_update_app_description">Je dostupná aktualizace FoxMMM. Klikněte zde pro aktualizaci.</string>
<string name="crash_reporting_headline">Hlášení o selhání</string>
<string name="setup_update_check_headline">Kontroly aktualizací</string>
<string name="update_button">Čekejte prosím…</string>
<string name="notification_channel_background_update">Kontrola aktualizací…</string>
<string name="zip_intent_module_install">Vážně chceš nainstalovat modul \"%1$s\" ze ZIP souboru \"%2$s\"\?
\n
\nUjisti se, že věříš zdroji tohoto modulu, neboť moduly jsou velice mocné a mohou udělat skoro cokoli.</string>
<string name="androidacy_thanks_desc">Obrovské poděkování patří společnosti Androidacy za její integraci a příspěvky do aplikace.</string>
<string name="reset_app_message">Tím se zcela odstraní všechna data aplikace a aplikaci se zavře. Moduly nebudou odinstalovány.</string>
<string name="update_message">Počkejte prosím, než zkontrolujeme a nainstalujeme aktualizace FoxMMM. Může to trvat pár minut</string>
<string name="error_download_update">Při stahování informací o aktualizaci došlo k chybě.</string>
<string name="low_quality_module_desc">Tento modul obsahuje metadata, která jsou buď neplatná, nebo jsou považována za označení modulu nízké kvality. Doporučuje se odinstalace.</string>
<string name="yer_a_wizard_harry">Jsi čaroděj, Harry!</string>
<string name="no_browser">Nemáte nainstalován prohlížeč. Pro pokračování nejaký nainstalujte.</string>
<string name="setup_background_update_check_require_wifi">Pro kontrolu aktualizací vyžadovat WiFi</string>
</resources>

@ -101,8 +101,7 @@
<string name="dev_mode_disabled">Modo desarrollador desactivado</string>
<string name="force_english_pref">Forzar el idioma al Inglés</string>
<string name="disable_low_quality_module_filter_pref">Desactivar el filtro de módulos de baja calidad</string>
<string name="disable_low_quality_module_filter_desc">Algunos módulos no declaran de manera adecuada sus metadatos causando errores visuales y/o indicando una mala calidad del módulo.
\nActívalo bajo tu propio riesgo!</string>
<string name="disable_low_quality_module_filter_desc">Algunos módulos no declaran de manera adecuada sus metadatos causando errores visuales y/o indicando una mala calidad del módulo, actívalo bajo su propio riesgo!</string>
<string name="dns_over_https_desc">
En algunos casos puede solucionar problemas de conexión
(No se aplica al WebView)
@ -163,7 +162,7 @@
<string name="crash_reporting_restart_message">La aplicación necesita ser reiniciada para que los cambios sean aplicados</string>
<string name="restart">Reiniciar</string>
<string name="androidacy_test_mode_disable_warning">La aplicación se reiniciará para deshabilitar el canal de prueba</string>
<string name="email">Tu correo electrónico</string>
<string name="email">Tu correo</string>
<string name="permission_notification_title">Permitir notificaciones\?</string>
<string name="permission_notification_grant">Conceder permiso</string>
<string name="repos">Repositorios</string>
@ -205,7 +204,7 @@
<string name="no_update_available">Estás al día!</string>
<string name="installing_update">Instalando actualización…</string>
<string name="no_file_found">ERROR: No se pudo encontrar el paquete de actualización.</string>
<string name="feedback_email">Correo electrónico (opcional)</string>
<string name="feedback_email">Correo (opcional)</string>
<string name="copy_button">Copiar texto</string>
<string name="crash_details">Causa desconocida</string>
<string name="reset_app">Reiniciar la aplicación</string>
@ -258,78 +257,16 @@
<string name="zip_load_failed">No se puede cargar el archivo zip</string>
<string name="background_update_check_permission_required">Por favor activa las notificaciones para esta opción.</string>
<string name="repo_update_failed">Algunos repositorios han fallado al actualizarse</string>
<string name="setup_custom_repos">Puedes agregar repositorios personalizados después en ajustes.</string>
<string name="setup_custom_repos">Puedes agregar repositorios customizados después en ajustes.</string>
<string name="setup_theme_header">Elige un tema</string>
<string name="setup_theme_light">Tema claro</string>
<string name="theme_black">AMOLED Negro</string>
<string name="setup_title">Configuración inicial</string>
<string name="language_cta_desc">Ayúdanos traduciéndolo! Pulsa aquí para averiguar más.</string>
<string name="install_terminal_reboot_now_message">Estas a punto de reiniciar tu dispositivo. Si guardaste tu trabajo, pulsa OK para continuar. De lo contrario, pulsa cancelar.</string>
<string name="install_terminal_reboot_now_message">Estas a punto de reiniciar tu dispositivo. Si guardaste tu trabajo, pulsa OK para continuar.
\nDe lo contrario, pulsa cancelar.</string>
<string name="setup_theme_system">Seguir al sistema</string>
<string name="repo_update_failed_message">Los siguientes repositorios han fallado al actualizarse:
\n
<string name="repo_update_failed_message">Los siguientes repositorios han fallado al actualizarse.
\n%s</string>
<string name="androidacy_webview_update_required">Tu webview está desactualizado! Por favor actualízalo.</string>
<string name="submit">Enviar</string>
<string name="setup_message">Bienvenido! Esta aplicación lo ayudará a instalar y administrar módulos Magisk. Para empezar, por favor seleccione las opciones debajo. Estos y más pueden ser configurados en los ajustes más adelante.</string>
<string name="contributors">Y por supuesto, gracias a todos nuestros colaboradores, ya sean traducciones, código, o simplemente pasar el rato con ellos! Los queremos a todos.</string>
<string name="no_file_provided">No se proporcionó ningún archivo al intentar abrir el zip.</string>
<string name="api_key_unchanged">La clave API que ingresa ya está en uso.</string>
<string name="androidacy_need_captcha">Actualización de Androidacy bloqueada por Captcha</string>
<string name="clear_app_data">Borrar datos de la aplicación</string>
<string name="magisk_alt_repo_name">Magisk Repositorio Alternativo</string>
<string name="clear_data_dialogue_title">Borrar datos de la aplicación\?</string>
<string name="clear_data_dialogue_message">Estás a punto de borrar los datos de la aplicación. Por favor confirma esta acción.</string>
<string name="debug_build">Esta es una compilación de depuración. Espere algunos errores y un peor rendimiento.</string>
<string name="repo_enabled_changed">Ha activado o desactivado un repositorio. Por favor actualice la lista de módulos o reinicie la aplicación.</string>
<string name="setup_theme_black">AMOLED Tema negro</string>
<string name="check_for_updates">Buscar actualizaciones de aplicaciones</string>
<string name="error_download_update">Ocurrió un error al descargar la información de actualización.</string>
<string name="feedback_submit">Enviar y reiniciar</string>
<string name="sentry_dialogue_empty_message">No especificó comentarios adicionales.</string>
<string name="crash_details_copied">Stacktrace copiado al portapapeles!</string>
<string name="upgraded">Premium activo</string>
<string name="reset_app_confirmation">Esto borrará por completo los datos de la aplicación, pero no afectará a los módulos.</string>
<string name="error_adding">No se pudo agregar el repositorio personalizado</string>
<string name="update_debug_download_pref">Probar el mecanismo de descarga de actualizaciones</string>
<string name="invalid_excludes">Entrada inválida</string>
<string name="background_update_check_excludes">Módulos para excluir de las comprobaciones de actualizaciones automáticas</string>
<string name="title_activity_update">Actualizador en la aplicación</string>
<string name="invalid_repo_url">La URL que ingresó para el repositorio es inválida</string>
<string name="clear_app_cache">Borrar caché de la aplicación</string>
<string name="cache_cleared">Caché borrado con éxito</string>
<string name="empty_field">Se requiere URL</string>
<string name="donate_androidacy">Donar a Androidacy</string>
<string name="reset_app_message">Esto eliminará por completo todos los datos de la aplicación y la cerrará. Los módulos no se desinstalarán.</string>
<string name="donate_fox">Donar a Fox2Code</string>
<string name="error_encrypted_shared_preferences">Ocurrió un error al leer las preferencias compartidas. Por favor reinicie la aplicación.</string>
<string name="sentry_dialogue_no_description">No se pudo enviar comentarios por que no se proporcionó una descripción</string>
<string name="sentry_dialogue_failed_toast">No se pudo enviar el comentario debido a un error</string>
<string name="sentry_dialogue_success">Comentario enviado exitosamente. Lo revisaremos en breve</string>
<string name="custom_repo_always_on">Los repositorios personalizados siempre están activos hasta que los elimine.</string>
<string name="transparent_theme_dialogue_title">Esta configurando un tema transparente</string>
<string name="androidacy_thanks_desc">Un gran agradecimiento a Androidacy por su integración y contribuciones a la aplicación.</string>
<string name="share_logs">Compartir registros de FoxMMM</string>
<string name="not_official_build">Esta aplicación es una compilación no oficial de FoxMMM.</string>
<string name="error_saving_logs">No se pudieron guardar los registros</string>
<string name="save_logs">Guardar registros en el almacenamiento y compartir</string>
<string name="setup_background_update_check_summary">Permítanos buscar actualizaciones de módulos y aplicaciones en segundo plano. Esta característica puede usar más batería y datos.</string>
<string name="install_terminal_config_missing">Falta el paquete %s para configuración del módulo, por lo que no podemos iniciarlo.</string>
<string name="setup_crash_reporting_summary">Reporte de fallos y monitoreo del rendimiento. Todos los reportes son estrictamente anónimos y confidenciales.</string>
<string name="low_performance_device_dialogue_title">Activar desenfoque en dispositivo de gama baja</string>
<string name="setup_theme_transparent_light">Tema transparente claro - desactivará monet y desenfoque!</string>
<string name="error_no_action">ERROR: Acción inválida especificada. Negarse a continuar.</string>
<string name="error_no_asset">ERROR: No se pudo analizar la información de actualización</string>
<string name="reset_api_key">Restablecer claves API</string>
<string name="upgrade_androidacy_promo">Mejora a premium</string>
<string name="feedback_message">Danos más detalles sobre lo que estabas haciendo cuando esto sucedió. ¡Cuanto más, mejor!</string>
<string name="please_feedback">Por favor ayúdanos diciéndonos qué estabas tratando de hacer cuando esto sucedió.</string>
<string name="sentry_dialogue_disabled">El reporte de fallos está desactivado. Actívelo para enviar comentarios.</string>
<string name="reset_warning">Si sigues viendo esta pantalla, reiniciar la aplicación puede ayudar. Esto borrará los datos de la aplicación pero no afectará a los módulos instalados.</string>
<string name="notification_update_ignore_desc">Lista de módulos para excluir de las comprobaciones de actualización</string>
<string name="notification_channel_category_background_update">Estado de actualización en segundo plano</string>
<string name="notification_channel_background_update_description">FoxMMM comprobando actualizaciones en segundo plano.</string>
<string name="notification_update_app_pref">Comprobar actualizaciones de la aplicación</string>
<string name="setup_app_analytics">Permitir análisis de aplicación</string>
<string name="notification_update_app_desc">Active la comprobación automática de las actualizaciones de aplicaciones. Las actualizaciones no se descargarán automáticamente.</string>
</resources>

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">Gestor de módulos Magisk de Fox</string>
<string name="app_name">Fox Magisk Modulo Manager</string>
<string name="app_name_short">Fox Mmm</string>
<string name="fail_root_magisk">No se pudo acceder a Root o Magisk</string>
<string name="fail_root_denied">Root ha sido denegado a través de la aplicación Magisk</string>
<string name="fail_root_denied">Root negado a través de la aplicación Magisk</string>
<string name="fail_magisk_missing">Magisk no está instalado en este dispositivo</string>
<string name="loading">Cargando…</string>
<string name="updatable">Actualizable</string>
@ -191,55 +191,4 @@
<string name="setup_background_update_check">Comprobación automática de actualizaciones</string>
<string name="setup_background_update_check_summary">Permitir la actualización de la aplicación y módulos, en segundo plano. Esta característica podría usar más batería y datos.</string>
<string name="setup_message">¡Bienvenidx! Esta aplicación le ayudará a gestionar e instalar módulos de Magisk. Para empezar, por favor seleccione las siguientes opciones. Estas y más podrán ser configuradas más tarde.</string>
<string name="setup_magisk_alt_repo">Activar el repositorio de Magisk Alt</string>
<string name="androidacy_update_needed">Esta aplicación está desactualizada.</string>
<string name="androidacy_update_needed_message">Por favor actualiza la aplicación a la última versión.</string>
<string name="zip_prop_load_failed">No se han podido cargar las propiedades del módulo</string>
<string name="zip_security_warning">¿Instalar %s\?</string>
<string name="zip_intent_module_install">¿Realmente desea instalar el módulo \"%1$s\" del archivo ZIP \"%2$s\"\?
\n
\nAsegúrate de que confías en la fuente de este módulo, ya que los módulos son muy potentes y pueden hacer casi cualquier cosa.</string>
<string name="language_cta_desc">¡Ayúdenos traduciéndolo! Pulse aquí para obtener más información.</string>
<string name="zip_load_failed">No se ha podido cargar el archivo zip</string>
<string name="clear_app_data">Borrar datos de la aplicación</string>
<string name="install_terminal_reboot_now_message">Estás a punto de reiniciar tu dispositivo. Si has guardado tu trabajo, pulsa OK para continuar. De lo contrario, pulsa cancelar.</string>
<string name="install_terminal_config_missing">Falta el paquete %s para la configuración del módulo, por lo que no podemos ejecutarlo.</string>
<string name="setup_androidacy_repo_summary">Incluye reseñas de usuarios, análisis antivirus automáticos, actualizaciones rápidas, una amplia selección y está respaldado por Androidacy.</string>
<string name="setup_magisk_alt_repo_summary">Mucho más laxo que el original. Tiene muchos módulos a costa de cierta seguridad.</string>
<string name="setup_crash_reporting_summary">Informes sobre crasheos y control del rendimiento. Todos los informes son estrictamente anónimos y confidenciales.</string>
<string name="setup_custom_repos">Puedes añadir repositorios personalizados más tarde en la configuración.</string>
<string name="repos">Repositorios</string>
<string name="misc">Varios</string>
<string name="setup_button_skip">Omitir</string>
<string name="low_performance_device_dialogue_title">Activar el desenfoque en un dispositivo de gama baja</string>
<string name="clear_data_dialogue_message">Estás a punto de borrar los datos de la aplicación. Por favor, confirma esta acción.</string>
<string name="debug_build">Esta es una versión de depuración. Espere algunos errores y peor rendimiento.</string>
<string name="androidacy_repo_name">Repositorio de Androidacy</string>
<string name="magisk_alt_repo_name">Repositorio de Magisk Alt</string>
<string name="finish">Finalizó</string>
<string name="theme_light">Claro</string>
<string name="setup_theme">Elige un tema</string>
<string name="setup_theme_header">Elige un tema</string>
<string name="setup_theme_system">Tema del sistema</string>
<string name="setup_theme_light">Tema claro</string>
<string name="setup_theme_dark">Tema oscuro</string>
<string name="setup_theme_black">Tema negro AMOLED</string>
<string name="setup_theme_transparent_light">Tema claro transparente - ¡Deshabilitará monet y el desenfoque!</string>
<string name="setup_theme_button">Elige un tema</string>
<string name="theme">Tema</string>
<string name="theme_system">Sistema</string>
<string name="theme_dark">Oscuro</string>
<string name="theme_black">Negro AMOLED</string>
<string name="theme_transparent_light">Claro (transparencia)</string>
<string name="theme_transparent_dark">Oscuro (transparencia)</string>
<string name="androidacy_thanks">Desarrollado en parte por Androidacy</string>
<string name="androidacy_webview_update_required">¡WebView no está actualizado! Por favor, actualícelo.</string>
<string name="alt_repo_info">Este repositorio tiene menos restricciones y revisiones, lo que puede dar lugar a módulos de menor calidad. Bastante básico, pero tiene un montón de módulos.</string>
<string name="clear_data_dialogue_title">¿Borrar datos de la aplicación\?</string>
<string name="repo_enabled_changed">Ha activado o desactivado un repositorio. Actualiza la lista de módulos o reinicia la aplicación.</string>
<string name="language_cta">¿No ves tu idioma\?</string>
<string name="no_file_provided">No se proporcionó ningún archivo al intentar abrir el zip.</string>
<string name="low_performance_device_dialogue_message">Estás intentando activar el desenfoque en un dispositivo que puede no funcionar bien con él.
\nPuedes activarlo, pero esto puede dar lugar a una mala experiencia de usuario y te recomendamos que no lo hagas.</string>
<string name="androidacy_thanks_desc">Un gran agradecimiento a Androidacy por su integración y contribuciones a la aplicación.</string>
</resources>

@ -14,7 +14,7 @@
<string name="no_web_view">Impossibile aprire il WebView di sistema</string>
<string name="title_activity_settings">Impostazione attività</string>
<string name="app_update_available">Aggiornamento disponibile</string>
<string name="app_update">Aggiornamento app</string>
<string name="app_update">Aggiornamento</string>
<string name="no_desc_found">Nessuna descrizione trovata.</string>
<string name="download_module">Scarica modulo</string>
<string name="install_module">Installa modulo</string>
@ -43,7 +43,7 @@
<string name="cancel" translatable="false">@android:string/cancel</string>
<!-- Traduzione della sezione del modulo -->
<string name="module_last_update">Ultimo aggiornamento:</string>
<string name="module_repo">Repository:</string>
<string name="module_repo">Repo:</string>
<string name="module_by">da</string>
<string name="module_downloads">Scaricamenti:</string>
<string name="module_stars">Preferiti:</string>
@ -74,7 +74,7 @@
<string name="pref_category_appearance">Aspetto</string>
<string name="pref_category_general">Generale</string>
<string name="repo_main_desc">La repository che fornisce i moduli Magisk</string>
<string name="repo_main_alt">Un\'alternativa a Magisk-Modules-Repo con meno restrizioni.</string>
<string name="repo_main_alt">Un\'alternativa alla Repository di default con meno restrizioni</string>
<string name="master_delete">Rimuovere i dati del modulo?</string>
<string name="master_delete_no">Mantieni i dati</string>
<string name="master_delete_yes">Rimuovi i dati</string>
@ -90,18 +90,22 @@
<string name="magisk_builtin_module">Modulo di Magisk integrato</string>
<string name="substratum_builtin_module">Modulo di Substratum integrato</string>
<string name="force_dark_terminal_title">Forza il terminale in modalità scura</string>
<string name="file_picker_failure">Il tuo gestore file non ha potuto accedere al file.</string>
<string name="file_picker_failure">Il tuo gestore file non ha potuto accedere ai dati sul dispositivo</string>
<string name="remote_install_title">Installazione remota</string>
<string name="file_picker_wierd">Il tuo gestore file ha fornito una risposta non valida.</string>
<string name="file_picker_wierd">Il tuo gestore file ha fornito una risposta non valida</string>
<string name="use_magisk_install_command_pref">Usa il comando di installazione del modulo magisk</string>
<string name="use_magisk_install_command_desc">Questo ha causato dei problemi durante i test per l\'installazione dei moduli, per questo l\'opzione è disponibile solo in modalità sviluppatore.
\nAbilitala a tuo rischio e pericolo!</string>
<string name="use_magisk_install_command_desc">
Questo ha causato dei problemi durante i test per l\'installazione dei moduli,
per questo l\'opzione è disponibile solo in modalità sviluppatore, abilita a tuo rischio e pericolo!
</string>
<string name="dev_mode_enabled">Modalità sviluppatore attivata</string>
<string name="dev_mode_disabled">Modalità sviluppatore disattivata</string>
<string name="force_english_pref">Forza la lingua inglese</string>
<string name="disable_low_quality_module_filter_pref">Disabilita il filtro qualità per i moduli</string>
<string name="disable_low_quality_module_filter_desc">Alcuni moduli non forniscono correttamente i loro metadati, causando errori grafici, e/o indicando bassa qualità.
\nAbilita a tuo rischio e pericolo!</string>
<string name="disable_low_quality_module_filter_desc">
Alcuni moduli non forniscono correttamente i loro metadati,causando errori grafici,
e/o indicando bassa qualità.\nDisabilita a tuo rischio e pericolo!
</string>
<string name="dns_over_https_pref">DNS sostituisce HTTPS</string>
<string name="dns_over_https_desc">
Potrebbe risolvere problemi di connessione in alcuni casi.
@ -113,7 +117,8 @@
le estensioni per il terminale.\nUtile se un modulo abusa le estensioni di Fox Mmm.
</string>
<string name="wrap_text_pref">Testo a capo</string>
<string name="wrap_text_desc">Mostra il testo su più righe invece di mettere tutto il testo in una sola riga quando si installa un modulo.</string>
<string name="wrap_text_desc">
Mostra il testo su più righe\nEvita di mettere tutto il testo in una sola riga quando si installa un modulo.</string>
<string name="enable_blur_pref">Sfocatura</string>
<string name="disable_chips_in_description">Disabilita i chip nella descrizione</string>
<string name="repo_enabled">Repository attiva</string>
@ -125,10 +130,10 @@
<string name="restore_module_list">Ripristina moduli</string>
<string name="require_internet">Questa operazione richiede una connessione ad internet</string>
<!-- Traduzione della notifica in background -->
<string name="notification_update_title">Trovati aggiornamenti per %1$d moduli</string>
<string name="notification_update_title">Trovato %i aggiornamenti del modulo</string>
<string name="notification_update_title_easter_egg">Aggiornamenti del modulo %i rilevati</string>
<string name="notification_update_subtitle">Fare clic per aprire l\'app</string>
<string name="notification_update_pref">Controllo aggiornamento moduli in automatico</string>
<string name="notification_update_pref">Controllo aggiornamento moduli in background</string>
<string name="notification_update_desc">Può aumentare il consumo della batteria</string>
<string name="notification_update_debug_pref">Notifica di prova</string>
<!-- Imposta su true nel file di traduzione se la tua lingua è da destra a sinistra -->
@ -146,11 +151,11 @@
<string name="api_key_unchanged">La chiave API che inserisci è la stessa di quella già in uso.</string>
<string name="permission_notification_title">Consentire le notifiche\?</string>
<string name="fail_magisk_missing">Magisk non è installato su questo dispositivo</string>
<string name="androidacy_repo_info">Questo repository può mostrare pubblicità non intrusiva per coprire i costi del server e di sviluppo. Recensioni delle funzionalità, scansioni antivirus automatiche e altro ancora.</string>
<string name="androidacy_repo_info">Questo repository può mostrare pubblicità non intrusiva per coprire i costi del server e di sviluppo. Funzionalità recensioni, scansioni antivirus automatiche e altro ancora.</string>
<string name="checking_api_key">Convalida della chiave API…</string>
<string name="androidacy_test_mode_warning">Stai impostando l\'app in modo che utilizzi un endpoint non di produzione per Androidacy. Ciò potrebbe comportare l\'instabilità dell\'app e il mancato caricamento del repository online. NON segnalare bug se hai attivato questo interruttore. L\'app verrà riavviata per ricaricare i repository.</string>
<string name="api_key_restart">La chiave API è stata modificata. Riavvia l\'app per applicare le modifiche.</string>
<string name="permission_notification_message">Abbiamo bisogno dell\'autorizzazione per le notifiche per informarti sugli aggiornamenti di app e moduli. Se non concedi questa autorizzazione, i controlli automatici degli aggiornamenti non verranno eseguiti.</string>
<string name="permission_notification_message">Abbiamo bisogno dell\'autorizzazione per le notifiche per informarti sugli aggiornamenti di app e moduli. Se non concedi questa autorizzazione, i controlli degli aggiornamenti in background non verranno eseguiti.</string>
<string name="androidacy_failed_to_parse_token">Impossibile recuperare il token da Androidacy. Per favore riprova più tardi.</string>
<string name="androidacy_failed_to_validate_token">Impossibile convalidare il token per Androidacy. Per favore riprova più tardi.</string>
<string name="androidacy_server_down">Impossibile contattare il server Androidacy. Controlla la connessione e riprova.</string>
@ -180,7 +185,8 @@
<string name="monet_disabled_summary">Monet non è compatibile con i temi trasparenti.</string>
<string name="blur_disabled_summary">La sfocatura non è compatibile con i temi trasparenti.</string>
<string name="transparent_theme_dialogue_title">Stai impostando un tema trasparente</string>
<string name="transparent_theme_dialogue_message">I temi trasparenti possono presentare alcune incoerenze e potrebbero non funzionare su tutte le ROM. Inoltre, monet e blur saranno disabilitati. Puoi tornare indietro in qualsiasi momento.</string>
<string name="transparent_theme_dialogue_message">I temi trasparenti possono presentare alcune incoerenze e potrebbero non funzionare su tutte le ROM. Inoltre, monet e blur saranno disabilitati.
\nPuoi tornare indietro in qualsiasi momento.</string>
<string name="custom_repo_always_on">I repository personalizzati sono sempre attivi fino a quando non li rimuovi.</string>
<string name="sentry_dialogue_message">Abbiamo riscontrato un errore! Aiutaci a migliorare l\'app aggiungendo alcune informazioni sull\'errore di seguito
\nIl nome e l\'e-mail sono facoltativi ma ci permetteranno di contattarti se necessario per ulteriori informazioni.</string>
@ -198,7 +204,7 @@
<string name="unofficial">Non ufficiale</string>
<string name="setup_title">Configurazione per la prima volta</string>
<string name="setup_button">Termina la configurazione</string>
<string name="setup_background_update_check">Controllo automatico degli aggiornamenti</string>
<string name="setup_background_update_check">Controllo degli aggiornamenti in background</string>
<string name="setup_androidacy_repo">Abilita il repository Androidacy</string>
<string name="permission_notification_grant">Concedere l\'autorizzazione</string>
<string name="background_update_check_permission_required">Abilita le notifiche per abilitare questa opzione.</string>
@ -231,7 +237,7 @@
<string name="repos">Repó</string>
<string name="misc">Varie</string>
<string name="setup_button_skip">Saltare</string>
<string name="alt_repo_info">Questo repository ha meno restrizioni e revisioni, il che può portare a moduli di qualità inferiore. Piuttosto scarno ma ha molti moduli.</string>
<string name="alt_repo_info">Questo repository ha meno restrizioni e revisioni, il che può portare a moduli di qualità inferiore. Abbastanza scarno ma ha molti moduli.</string>
<string name="debug_build">Questa è una build di debug. Aspettatevi alcuni bug e prestazioni peggiori.</string>
<string name="androidacy_repo_name">Repo Androidacy</string>
<string name="magisk_alt_repo_name">Magic Alt Repo</string>
@ -249,157 +255,4 @@
<string name="theme_black">AMOLED nero</string>
<string name="theme_transparent_light">Luce (trasparenza)</string>
<string name="theme_light">Luce</string>
<string name="title_activity_update">Aggiornamento in-app</string>
<string name="update_title">Aggiorna l\'app</string>
<string name="zip_prop_load_failed">Impossibile caricare le proprietà del modulo</string>
<string name="zip_security_warning">Installare %s\?</string>
<string name="zip_unpacking">Controllando il modulo…</string>
<string name="warning_message">Questo modulo potrebbe essere stato installato senza che tu lo sappia oppure sta provando a nascondersi.
\n
\nConsigliamo di disinstallarlo.</string>
<string name="understand">Ho capito</string>
<string name="language_cta_desc">Aiutaci a tradurre! Clicca qui per scoprire di più.</string>
<string name="androidacy_thanks">Sviluppato in parte da Androidacy</string>
<string name="zip_load_failed">Impossibile caricare il file zip</string>
<string name="source_code_summary"><b>Commit</b> %1$s @ %2$s</string>
<string name="no_file_provided">Nessun file fornito mentre si prova ad aprire il file zip.</string>
<string name="update_button">Perfavore aspetta…</string>
<string name="pref_category_contributors">Collaboratori</string>
<string name="fox2code_thanks_desc">Fox2Code è il creatore originale dell\'app. Senza di lui, questo non sarebbe mai stato possibile.</string>
<string name="fox2code_thanks">Creato da Fox2Code</string>
<string name="save_logs">Salva i log sul dispositivo e condividili</string>
<string name="error_saving_logs">Impossibile salvare i log</string>
<string name="share_logs">Condividi i log di FoxMMM</string>
<string name="repo_update_failed_message">Non sono riuscito ad aggiornare i seguenti repository:
\n
\n%s</string>
<string name="reset_api_key">Reimposta le chiavi API</string>
<string name="upgrade_androidacy_promo">Passa a premium</string>
<string name="crash_text">Abbiamo avuto un problema!</string>
<string name="feedback_submit">Invia e riavvia</string>
<string name="please_feedback">Perfavore aiutaci dicendoci cosa stavi facendo quando è accaduto.</string>
<string name="sentry_dialogue_disabled">La segnalazione degli arresti anomali è disattivata. Abilitala per inviarci dei feedback.</string>
<string name="feedback_name">Nome (opzionale)</string>
<string name="feedback_email">Email (opzionale)</string>
<string name="sentry_dialogue_empty_message">Non hai specificato un feedback aggiuntivo.</string>
<string name="crash_icon">Icona di crash</string>
<string name="copy_button">Copia testo</string>
<string name="crash_details">Causa sconosciuta</string>
<string name="crash_details_copied">Copiata la stacktrace negli appunti!</string>
<string name="crash_full_stacktrace">Stacktrace:
\n%1$s</string>
<string name="error_no_extras">ERRORE: Dati non validi ricevuti al lancio</string>
<string name="update_debug_warning">Sembra che tu stia eseguendo una build di debug. Le build di debug devono essere aggiornate manualmente e non supportano gli aggiornamenti in-app</string>
<string name="error_no_action">ERRORE: Azione non valida specificata. Non continuo.</string>
<string name="update_available">Aggiornamento trovato</string>
<string name="no_update_available">L\'app è aggiornata!</string>
<string name="download_update">Scarica l\'aggiornamento</string>
<string name="error_download_update">Errore nel download delle informazioni dell\'aggiornamento.</string>
<string name="error_no_asset">ERRORE: Impossibile analizzare le informazioni dell\'aggiornamento</string>
<string name="downloading_update">Download dell\'aggiornamento… %1$d%%</string>
<string name="reset_app">Reimposta l\'app</string>
<string name="installing_update">Installando l\'aggiornamento…</string>
<string name="no_file_found">ERRORE: Impossibile trovare il pacchetto dell\'aggiornamento.</string>
<string name="check_for_updates">Cerca aggiornamenti</string>
<string name="upgraded_summary">Sei davvero fantastico! Sembra che tu abbia già aggiornato il tuo abbonamento e stia supportando Androidacy.</string>
<string name="upgraded">Premium attivo</string>
<string name="reset_warning">Se continui a visualizzare questa schermata, il ripristino dell\'applicazione potrebbe essere utile. Questa operazione cancella i dati dell\'app ma non influisce sui moduli installati.</string>
<string name="reset_app_message">Questa operazione rimuoverà tutti i dati dell\'applicazione e la chiuderà. I moduli non verranno disinstallati.</string>
<string name="reset">Reimposta</string>
<string name="error_adding">Errore nell\'aggiunta del repository personalizzato</string>
<string name="api_key_mismatch">La chiave API è in un formato non valido</string>
<string name="theme_transparent_dark">Scuro (trasparente)</string>
<string name="androidacy_thanks_desc">Un grande ringraziamento a Androidacy per l\'integrazione e il contributo all\'app.</string>
<string name="contributors">E naturalmente, grazie a tutti i nostri collaboratori, che si tratti di traduzioni, codice o semplicemente di essere divertenti da frequentare! Vi vogliamo bene.</string>
<string name="setup_theme_title">Scegli il tema</string>
<string name="setup_language_button">Scegli lingua</string>
<string name="title_activity_setup">Installazione guidata</string>
<string name="action_settings">Impostazioni</string>
<string name="notification_update_ignore_desc">Lista dei moduli da escludere dal controllo degli aggiornamenti</string>
<string name="notification_update_ignore_pref">Escludi moduli</string>
<string name="pref_category_updates">Aggiornamenti</string>
<string name="invalid_excludes">Input non valido</string>
<string name="language_cta">Non trovi la tua lingua\?</string>
<string name="zip_intent_module_install">Sicuro di voler installare il modulo \"%1$s\" dal file ZIP \"%2$s\"\?
\n
\nAssicurati di fidarti della fonte di questo modulo, i moduli sono molto potenti e possono fare quasi tutto.</string>
<string name="upgrade_androidacy_promo_desc">Passare a premium rimuoverà le pubblicità, i captcha e i download per il Repository di Androidacy, e supporta Androidacy e gli autori dei moduli.</string>
<string name="not_official_build">Quest\'app è una build non ufficiale di FoxMMM.</string>
<string name="feedback_message">Dacci più dettagli su cosa stavi facendo quando è accaduto. Più sappiamo, meglio è!</string>
<string name="more_details">Più dettagli potrebbero essere qua sotto.</string>
<string name="sentry_enable_nag">Sembra che la segnalazione degli arresti anomali sia disabilitata. Perfavore attivala per inviare feedback.</string>
<string name="reset_app_confirmation">Questa operazione cancellerà completamente i dati delle app, ma non avrà effetto sui moduli.</string>
<string name="invalid_characters_message">L\'elenco dei moduli inseriti non è valido. Inserire solo id di moduli validi separati da virgole</string>
<string name="background_update_check_excludes">Moduli da escludere dal controllo automatica degli aggiornamenti</string>
<string name="update_message">Si prega di attendere mentre controlliamo e installiamo gli aggiornamenti di FoxMMM. L\'operazione potrebbe richiedere alcuni minuti</string>
<string name="checking_for_update">Cercando aggiornamenti…</string>
<string name="yer_a_wizard_harry">Sei un mago, Harry!</string>
<string name="keep_tapping_to_enter_hogwarts">Continua a premere per essere ammesso ad Hogwarts!</string>
<string name="modules">Moduli</string>
<string name="no_browser">Non hai un browser installato.
\nInstallane uno per continuare.</string>
<string name="search">Cerca</string>
<string name="update_cancel_button">Cancella aggiornamento</string>
<string name="invalid_repo_url">L\'URL della repo non è corretto</string>
<string name="add_repo_message">Le repository devono essere su protocollo HTTPS, e devono seguire le specifiche della documentazione.</string>
<string name="notification_update_module_template">%1$s alla versione %2$s</string>
<string name="notification_channel_background_update">Controllo aggiornamenti…</string>
<string name="notification_channel_background_update_description">FoxMMM sta controllando gli aggiornamenti in background.</string>
<string name="notification_channel_category_background_update">Stato aggiornamento in background</string>
<string name="notification_update_wifi_desc">Controlla solo su WiFi</string>
<string name="notification_update_wifi_pref">Richiede una connessione Wi-Fi o una connessione senza limiti per la ricerca di aggiornamenti. Si consiglia di lasciarlo attivo se hai un piano dati limitato.</string>
<string name="background_update_check_excludes_no_modules">Nessun modulo installato sul dispositivo</string>
<string name="auto_updates_notifs">Notifica se c\'è un aggiornamento di un modulo</string>
<string name="notification_group_updates">Aggiornamenti</string>
<string name="online">Online</string>
<string name="safe">Sicuro</string>
<string name="safe_module">Verifica modulo sicuro</string>
<string name="notification_update_app_desc">Abilita la ricerca automatica di aggiornamenti dell\'app. Gli aggiornamenti non verranno scaricati automaticamente.</string>
<string name="notification_update_app_pref">Controlla aggiornamenti app</string>
<string name="notification_channel_category_app_update">Aggiornamenti app</string>
<string name="notification_channel_category_app_update_description">Notifica quando un aggiornamento dell\'app è disponibile</string>
<string name="notification_channel_background_update_app">Aggiornamento app disponibile!</string>
<string name="notification_channel_background_update_app_description">Un aggiornamento per FoxMMM è disponibile. Clicca qui per aggiornare.</string>
<string name="crash_reporting_headline">Segnalazione crash</string>
<string name="setup_update_check_headline">Ricerca aggiornamenti</string>
<string name="setup_background_update_check_require_wifi">Ricerca aggiornamenti solo su rete wifi</string>
<string name="setup_background_update_check_require_wifi_summary">Richiede una rete wifi o una connessione senza limiti per cercare aggiornamenti</string>
<string name="setup_app_analytics">Consenti l\'invio di statistiche dell\'app</string>
<string name="clear_app_cache_desc">Normalmente non è necessario, ma può aiutare a risolvere alcuni problemi.</string>
<string name="clear_app_cache">Pulisci cache dell\'app</string>
<string name="cache_cleared">Cache pulita con successo</string>
<string name="cache_clear_failed">Impossibile pulire la cache</string>
<string name="clear_cache_dialogue_title">Pulire la cache dell\'app\?</string>
<string name="clear_cache_dialogue_message">Questo pulirà la cache dell\'app. Le preferenze saranno salvate, ma l\'app potrebbe momentamente richiedere più tempo a fare alcune operazioni.</string>
<string name="notification_update_summary">I seguenti moduli possono essere aggiornati:</string>
<string name="notification_channel_category_background_update_description">Mostra una notifica durante la ricerca di aggiornamenti cosicché il sistema non lo interrompa</string>
<string name="low_quality_module_desc">Questo modulo ha dei metadata che non sono corretti o sono considerati un segno di scarsa qualità. Si consiglia la rimozione.</string>
<string name="safe_message">Questo modulo è stato verificato ed è sicuro, ha superato i controlli di qualità e sicurezza, ed è stato controllato per malware.</string>
<string name="update_debug_download_pref">Test del sistema di aggiornamento</string>
<string name="changelog_none">Ancora nessuna modifica!</string>
<string name="setup_crash_reporting_pii_summary">Potrebbe includere ID o indirizzi IP. Nessun dato verrà usato per altri scopi al di fuori di analizzazioni di crash e miglioramenti in performance.</string>
<string name="certificate_error">Il certificato del server non può essere verificato. Assicurati che nulla stia impedendo le connessioni HTTPS per FoxMMM.</string>
<string name="pref_category_privacy">Privacy</string>
<string name="crash_reporting_pii_desc">Consente di inviare informazioni aggiuntive in rapporti di crash, dei quali alcuni potrebbero contenere informazioni identificabili, come un indirizzo IP o un ID.</string>
<string name="crash_reporting_pii">Invia informazioni aggiuntive</string>
<string name="setup_crash_reporting_pii">Invia informazioni aggiuntive nei rapporti di crash.</string>
<string name="error_creating_cookie_database">Errore nell\'accesso a WebView. La funzionalità potrebbe non essere disponibile.</string>
<string name="setup_scroll_down">Per concludere, scorri verso il basso e visualizza tutte le opzioni.</string>
<string name="empty_field">L\'URL è richiesto</string>
<string name="repo_already_added">La repository esiste già.</string>
<string name="other_section">Altro</string>
<string name="eula_agree">Continuando, accetti la licenza LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.en.html) e l\'EULA (https://www.androidacy.com/foxmmm-eula/)</string>
<string name="analytics_desc">Ci consente di tracciare l\'utilizzo della app e la quantità di installazioni. Conforme al GDPR, usa Matomo, un servizio offerto da Androidacy.</string>
<string name="debug_cat">Debugging</string>
<string name="announcements">Notizie e aggiornamenti</string>
<string name="back">Indietro</string>
<string name="showcase_mode_dialogue_message">Un riavvio della app è richiesto, per attivare la modalità showcase.</string>
<string name="donate_fox">Dona a Fox2Code</string>
<string name="donate_androidacy">Dona ad Androidacy</string>
<string name="donate_androidacy_sum">Compra un abbonamento premium per Androidacy, per sostenere la app e la repository.</string>
<string name="promo_code_copied">Usa il codice per uno sconto per sulla metà del tuo primo mese!</string>
<string name="warning_pls_restart">Ricorda che alcune impostazioni potrebbero non avere effetto fino al riavvio della app.</string>
<string name="language_not_available">La lingua %s non è ancora stata tradotta. Vuoi aiutare a farlo\?</string>
<string name="blur_desc">Crea un effetto di sfocatura dietro ad alcuni elementi. Ricorda che questo effetto visivo potrebbe influire negativamente su alcuni dispositivi, o addirittura non funzionare su alcuni.</string>
<string name="error_encrypted_shared_preferences">Non è stato possibile determinare le preferenze condivise. Ripristina la app.</string>
</resources>

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="fail_root_magisk">Root または Magisk にアクセスできません</string>
<string name="fail_root_magisk">Root または Magisk にアクセスできないよ</string>
<string name="loading">読み込み中…</string>
<string name="updatable">アップデート可能</string>
<string name="installed">インストール済</string>
<string name="online_repo">オンラインリポジトリ</string>
<string name="showcase_mode">アプリは現在ロックダウンモードです</string>
<string name="failed_download">ファイルのダウンロードに失敗しまし</string>
<string name="fail_internet">インターネットに接続できません</string>
<string name="app_update_available">アプリの最新版を利用できます</string>
<string name="online_repo">オンラインリポジトリ</string>
<string name="showcase_mode">アプリは現在ロックダウンモードだよ</string>
<string name="failed_download">ファイルのダウンロードに失敗した</string>
<string name="fail_internet">インターネットに接続できないよ</string>
<string name="app_update_available">アプリの新しいバージョンがあるよ</string>
<string name="app_update">アプリをアップデート</string>
<!-- Module section translation -->
<string name="module_last_update">最終更新:</string>
@ -17,39 +17,39 @@
<!-- Preference Titles -->
<!-- Note: Lockdown mode used to be called showcase mode -->
<string name="showcase_mode_pref">ロックダウンモード</string>
<string name="showcase_mode_desc">ロックダウンモードはモジュール処理の実行を禁止します</string>
<string name="showcase_mode_desc">ロックダウンモードはモジュールが処理を実行することを禁止するよ</string>
<string name="pref_category_settings">設定</string>
<string name="pref_category_info">情報</string>
<string name="show_licenses">ライセンスを表示</string>
<string name="licenses">ライセンス</string>
<string name="show_incompatible_pref">互換性のないモジュール表示</string>
<string name="show_incompatible_desc">メタデータを基に、このデバイスと互換性がないモジュールを表示します</string>
<string name="show_incompatible_pref">互換性のないモジュール表示</string>
<string name="show_incompatible_desc">メタデータを基に、この端末に互換性がないモジュールも表示</string>
<string name="pref_category_repos">リポジトリ</string>
<string name="repo_main_desc">Magisk モジュールを管理しているリポジトリ</string>
<string name="repo_main_alt">制限の少ない Magisk-Modules-Repo の代替です</string>
<string name="master_delete">モジュールファイルを削除しますか\?</string>
<string name="repo_main_alt">いくつかの制約がある Magisk-Modules-Repo の代替だよ</string>
<string name="master_delete">モジュールファイルを削除する?</string>
<string name="master_delete_no">保持</string>
<string name="master_delete_yes">削除</string>
<string name="master_delete_fail">モジュールファイル削除に失敗しまし</string>
<string name="master_delete_fail">モジュールファイル削除に失敗した</string>
<string name="theme_pref">テーマ</string>
<string name="module_id_prefix">モジュール ID:</string>
<string name="install_from_storage">ストレージからモジュールをインストール</string>
<string name="invalid_format">選択されたモジュールは無効な形式です</string>
<string name="invalid_format">選択されたモジュールは不正なフォーマットだよ</string>
<string name="local_install_title">ローカルインストール</string>
<string name="source_code">ソースコード</string>
<string name="dev_mode_enabled">開発者モード有効</string>
<string name="dev_mode_enabled">開発者モード有効</string>
<string name="force_english_pref">英語のアプリ言語</string>
<string name="app_name">Fox\'s Magisk Module Manager</string>
<string name="app_name">フォックスのマギスクモジュールマネージャー</string>
<string name="app_name_short">Fox\'s Mmm</string>
<string name="fail_root_denied">Magisk アプリでの Root アクセスが拒否されました</string>
<string name="slow_modules">モジュールの起動に時間がかかっています。モジュールを無効化してみてください</string>
<string name="no_web_view">システムの WebView を開けません</string>
<string name="title_activity_settings">SettingsActivity</string>
<string name="no_desc_found">概要はありません</string>
<string name="fail_root_denied">Magisk アプリでルートアクセスが拒否されたよ</string>
<string name="slow_modules">モジュールの起動に時間がかかりすぎてるよ、モジュールの無効化を試してみてね</string>
<string name="no_web_view">システム WebView を開けないよ</string>
<string name="title_activity_settings">アクティビティの設定</string>
<string name="no_desc_found">概要はないよ</string>
<string name="download_module">モジュールをダウンロード</string>
<string name="install_module">モジュールをインストール</string>
<string name="update_module">モジュールをアップグレード</string>
<string name="changelog">更新履歴</string>
<string name="changelog">更新ログ</string>
<string name="website">ウェブサイト</string>
<string name="support">サポート</string>
<string name="donate">寄付</string>
@ -59,103 +59,103 @@
<string name="config">設定</string>
<string name="favourite">お気に入り</string>
<string name="report_bugs">バグを報告</string>
<string name="sniffed_modules">発見したモジュール</string>
<string name="submit_modules">モジュールを申請</string>
<string name="require_android_6">Android 6.0 以降が必要です</string>
<string name="require_android_12">Android 12 以降が必要です</string>
<string name="sniffed_modules">見つけたモジュール</string>
<string name="submit_modules">モジュールを送信</string>
<string name="require_android_6">Android 6.0 以上が必要だよ</string>
<string name="require_android_12">Android 12 以上が必要だよ</string>
<string name="install_terminal_reboot_now">再起動</string>
<string name="module_downloads">ダウンロード数:</string>
<string name="module_stars">スター:</string>
<string name="module_can_change_boot">boot を改変する可能性があります</string>
<string name="module_can_change_boot_desc">このモジュールは boot イメージを改変することあります</string>
<string name="module_min_magisk_chip">最小: Magisk %s</string>
<string name="module_min_sdk_chip">最小: Android</string>
<string name="module_max_sdk_chip">最大: Android</string>
<string name="module_stars">スター:</string>
<string name="module_can_change_boot">boot を変更する可能性があるよ</string>
<string name="module_can_change_boot_desc">このモジュールは boot イメージを変更することがあるよ</string>
<string name="module_min_magisk_chip">最小 Magisk %s</string>
<string name="module_min_sdk_chip">最小 Android</string>
<string name="module_max_sdk_chip">最大 Android</string>
<string name="manage_repos_pref">リポジトリを管理</string>
<string name="prevent_reboot_pref">再起動を防</string>
<string name="prevent_reboot_desc">予期しない再起動を防</string>
<string name="prevent_reboot_pref">再起動を防</string>
<string name="prevent_reboot_desc">予期しない再起動を防</string>
<string name="enable_monet">Monet を有効化</string>
<string name="pref_category_security">セキュリティ</string>
<string name="pref_category_appearance">外観</string>
<string name="pref_category_general">一般</string>
<string name="magisk_outdated">Magisk の最新版があります!</string>
<string name="magisk_outdated">Magisk の新しいバージョンがあるよ!</string>
<string name="theme_mode_pref">テーマモード</string>
<string name="low_quality_module">低品質モジュール</string>
<string name="substratum_builtin_module">Substratum 内蔵モジュール</string>
<string name="low_quality_module">低品質モジュール</string>
<string name="substratum_builtin_module">基盤内蔵モジュール</string>
<string name="force_dark_terminal_title">ダークターミナル</string>
<string name="remote_install_title">リモートインストール</string>
<string name="file_picker_wierd">ファイル選択ツールが一般的ではない応答をしました</string>
<string name="use_magisk_install_command_pref" tools:ignore="TypographyDashes">\"magisk --install-module\" コマンドを使用してください</string>
<string name="dev_mode_disabled">開発者モード無効</string>
<string name="disable_low_quality_module_filter_pref">低品質モジュールを表示</string>
<string name="file_picker_wierd">使ってるファイルピッカーが普通ではない応答をしたよ</string>
<string name="use_magisk_install_command_pref" tools:ignore="TypographyDashes">\"magisk --install-module\" コマンドを使ってね</string>
<string name="dev_mode_disabled">開発者モード無効</string>
<string name="disable_low_quality_module_filter_pref">低品質モジュールを表示</string>
<string name="dns_over_https_pref">DNS over HTTPS</string>
<string name="dns_over_https_desc">接続の問題が解決する可能性があります。WebView には適用されません</string>
<string name="dns_over_https_desc">接続の問題を解決することがあるよWebview に対しては効果がないよ</string>
<string name="disable_extensions_pref">Mmm なし</string>
<string name="disable_extensions_desc">モジュールがターミナルの拡張機能を使用できるようにするため Fox\'s Mmm の拡張機能を無効化します
\nMmm の拡張機能の誤用を防ぐ事ができます</string>
<string name="wrap_text_pref">テキスト折り返し</string>
<string name="fail_magisk_missing">このデバイスに Magisk がインストールされていません</string>
<string name="description">概要</string>
<string name="disable_extensions_desc">モジュールがターミナルの拡張機能を使えるように Fox\'s Mmm の拡張機能をオフにするよ
\nMmm の拡張機能を間違って使うことを防ぐのに便利だよ</string>
<string name="wrap_text_pref">テキスト折り返し</string>
<string name="fail_magisk_missing">このデバイスに Magisk がインストールされてないよ</string>
<string name="description">詳細</string>
<string name="sniffing_modules">モジュールを探しています</string>
<string name="language">言語</string>
<string name="module_needs_ramdisk">ramdisk が必要です</string>
<string name="module_needs_ramdisk_desc">このモジュールをインストールするには ramdisk から起動する必要があります</string>
<string name="module_needs_ramdisk">ramdisk が必要だよ</string>
<string name="module_needs_ramdisk_desc">このモジュールをインストールするには ramdisk を起動する必要があるよ</string>
<string name="magisk_builtin_module">Magisk 内蔵モジュール</string>
<string name="file_picker_failure">そのファイル選択ツールでファイルにアクセスできませんでした</string>
<string name="use_magisk_install_command_desc">テスト中にモジュールインストールエラーの診断ツールに問題が発生したため、このオプションは開発者モードに隠されています
\n自己責任でこの機能を有効化してください!</string>
<string name="disable_low_quality_module_filter_desc">一部のモジュールはメタデータが不完全なため、不具合が発生したりするなど低品質な可能性があります。
\n自己責任でこの機能を有効化してください!</string>
<string name="api_key_summary">Androidacy のカスタム API キーを使用します。プレミアム会員の広告の削除などが使用できます</string>
<string name="androidacy_repo_disabled_message">このビルドには Androidacy リポジトリに使用するクライアントキーがありません。モジュールのレビューや、セキュリティチェックなどをするには GitHub リリースをダウンロードしてください</string>
<string name="go_to_online_repo">スクロールしてオンラインリポジトリへ移動</string>
<string name="setup_message">ようこそ。このアプリでは Magisk モジュールのインストールと管理ができます。アプリを開始する前に、以下の設定を選択してください。これらの設定は設定画面から変更することが可能です</string>
<string name="low_performance_device_dialogue_message">ローエンドのデバイスでぼかし機能を有効化しようとしています
\n有効化すると動作が重くなる可能性があります</string>
<string name="repo_enabled_changed">リポジトリを有効化または無効化しました。モジュールリストを再読み込みするかアプリを再起動してください</string>
<string name="file_picker_failure">使ってるファイルピッカーではファイルにアクセスできないよ</string>
<string name="use_magisk_install_command_desc">テスト中にエラー診断ツールで問題が発生したので、このオプションは開発者モードに隠されたよ
\n自己責任でオンにしてね!</string>
<string name="disable_low_quality_module_filter_desc">いくつかのモジュールは metadata が十分なものでなかったりするため、不具合が発生することがあるよ。
\n自己責任でオンにしてね!</string>
<string name="api_key_summary">Androidacy にカスタム API キーを使うよ。サブスクリプションを使ってたり広告除去機能などを使ってるときに便利だよ</string>
<string name="androidacy_repo_disabled_message">このビルドには Androidacy リポジトリのクライアントキーがないよ。モジュールをレビューしたり、セキュリティチェックなどをするには GitHub リリースをダウンロードして</string>
<string name="go_to_online_repo">スクロールしてリポジトリをオンラインにする</string>
<string name="setup_message">こんにちは!このアプリでは Magisk モジュールのインストールと管理ができるよ。まず最初に下のオプションを選んでね。この設定は後で変更することができるよ</string>
<string name="low_performance_device_dialogue_message">ブラーがうまく動かない可能性があるデバイスで有効化しようとしているよ
\n動作速度が遅くなったりすることがあるので有効化しないことをおすすめするよ</string>
<string name="repo_enabled_changed">リポジトリを有効化または無効化した。モジュールリストを再読み込みするかアプリを再起動して</string>
<string name="setup_theme">テーマ選択</string>
<string name="setup_theme_header">テーマ選択</string>
<string name="setup_theme_black">AMOLED ブラックテーマ</string>
<string name="theme_transparent_light">ライト(透過)</string>
<string name="androidacy_webview_update_required">WebView のバージョンが古いです!アップデートしてください</string>
<string name="language_cta">利用したい言語がありませんか\?</string>
<string name="language_cta_desc">よろしければ翻訳にご協力ください!ここをタップして詳細を確認できます。</string>
<string name="androidacy_thanks_desc">このアプリへの貢献に対して、Androidacy にとても感謝しています。</string>
<string name="theme_transparent_light">Light透過</string>
<string name="androidacy_webview_update_required">WebView のバージョンが古いよ!アップデートしてね</string>
<string name="language_cta">使いたい言語がないですか?</string>
<string name="language_cta_desc">翻訳に協力してください!ここをタップして詳細を確認できます。</string>
<string name="androidacy_thanks_desc">このアプリへの貢献に対して、Androidacy にとても感謝します。</string>
<string name="contributors">もちろん、翻訳者、プログラマ、その他貢献者にも感謝しています!いつもありがとうございます。</string>
<string name="wrap_text_desc">モジュールのインストール時にテキストを複数の行に分けて表示します。</string>
<string name="enable_blur_pref">ぼかし</string>
<string name="wrap_text_desc">モジュールのインストール時にテキストを複数の行に分けて表示するよ</string>
<string name="enable_blur_pref">ブラー</string>
<string name="disable_chips_in_description">概要のチップを無効化</string>
<string name="repo_enabled">リポジトリ ON</string>
<string name="repo_disabled">リポジトリ OFF</string>
<string name="add_repo">リポジトリ追加</string>
<string name="remove_repo">リポジトリ削除</string>
<string name="custom_url">カスタム URL</string>
<string name="repo_enabled">リポジトリオン</string>
<string name="repo_disabled">リポジトリオフ</string>
<string name="add_repo">リポジトリ追加</string>
<string name="remove_repo">リポジトリ削除</string>
<string name="custom_url">カスタムURL</string>
<string name="backup_module_list">モジュールをバックアップ</string>
<string name="api_key_not_set">Androidacy API キーが空です</string>
<string name="api_key_not_set">Androidacy API キーが空だよ</string>
<string name="api_key_set">現在の Androidacy API キー</string>
<string name="api_key_invalid">API キーを検証できませんでした。確認後に再度お試しください</string>
<string name="api_key_valid">API キーが有効です</string>
<string name="api_key_invalid">API キーを検証できなかったよ。もう一度確認してみてね</string>
<string name="api_key_valid">API キーが有効だよ</string>
<string name="checking_api_key">API キーを検証しています…</string>
<string name="please_wait">少々お待ちください</string>
<string name="androidacy_update_needed">このアプリのバージョンが古いです</string>
<string name="androidacy_update_needed_message">最新バージョンにアップデートしてください</string>
<string name="repo_update_failed_extended">%1$s のアップデートに失敗しました。後ほど再度お試しください</string>
<string name="monet_disabled_summary">Monet は透過テーマと互換性がありません</string>
<string name="blur_disabled_summary">ぼかしは透過テーマと互換性がありません</string>
<string name="transparent_theme_dialogue_title">透過テーマを設定しま</string>
<string name="transparent_theme_dialogue_message">透過テーマはいくつかの ROM では正常に動作しません。また、Monet とぼかしの設定は無効化されます。設定の変更はいつでも可能です</string>
<string name="androidacy_repo_info">このリポジトリにはサーバーや開発のコストをカバーする為に広告が表示される場合があります。リポジトリにはレビューや自動ウィルススキャンなどの機能があります</string>
<string name="custom_repo_always_on">カスタムリポジトリは削除されるまで常に有効です</string>
<string name="sentry_dialogue_message">エラーが発生しました!下記のエラーに情報を追加してアプリの改善に協力してください
\n追加の情報を受け取りたい場合は名前とメールアドレスを入力してください</string>
<string name="sentry_dialogue_title">あっ!アプリが強制終了しました</string>
<string name="androidacy_update_needed">このアプリのバージョンが古い</string>
<string name="androidacy_update_needed_message">アプリを最新版にアップデートしてね</string>
<string name="repo_update_failed_extended">%1$s のアップデートに失敗したよ。もう一度試してみてね</string>
<string name="monet_disabled_summary">Monet は透過テーマと互換性がないよ</string>
<string name="blur_disabled_summary">ブラーは透過テーマとは互換性がないよ</string>
<string name="transparent_theme_dialogue_title">透過テーマを設定するよ</string>
<string name="transparent_theme_dialogue_message">透過テーマはいくつかの ROM では動かないことがあるよ。また、Monet とブラーの設定は無効化されるよ。設定はいつでも元に戻せるよ</string>
<string name="androidacy_repo_info">このリポジトリにはレビューや自動ウイルススキャンなどの広告が含まれていることがあるよ</string>
<string name="custom_repo_always_on">カスタムリポジトリは削除されるまで常に有効だよ</string>
<string name="sentry_dialogue_message">エラーが発生しました!下記のエラーに情報を追加してアプリの改善に協力してね
\n名前とメールアドレスは必須ではないですが返信を受け取りたい場合は入力してね</string>
<string name="sentry_dialogue_title">あっ!アプリが強制終了したよ</string>
<string name="name">あなたの名前</string>
<string name="email">あなたのメールアドレス</string>
<string name="additional_info">発生した状況を入力してください</string>
<string name="additional_info">何が起こったか入力してね</string>
<string name="submit">送信</string>
<string name="sentry_dialogue_failed_toast">エラーが発生したためフィードバックを送信できませんでした</string>
<string name="sentry_dialogue_success">フィードバックを送信しました。確認次第すぐに返信します</string>
<string name="sentry_dialogue_no_description">フィードバックを送信するには情報を追加してください</string>
<string name="sentry_dialogue_failed_toast">エラーが発生してフィードバックを送信できなかったよ</string>
<string name="sentry_dialogue_success">フィードバックを送信したよ。できるだけすぐに確認するね</string>
<string name="sentry_dialogue_no_description">フィードバックを送信するには概要を入力してね</string>
<string name="pref_pkg_info_summary">%1$s v%2$s (%3$d) | %4$s ビルド</string>
<string name="official">公式</string>
<string name="unofficial">非公式</string>
@ -165,225 +165,206 @@
<string name="setup_crash_reporting">Sentry を有効化</string>
<string name="repos">リポジトリ</string>
<string name="source_code_summary"><b>コミット</b> %1$s @ %2$s</string>
<string name="no_file_provided">zip ファイルにファイルが含まれていません</string>
<string name="zip_load_failed">zip ファイルを読み込めませんでした</string>
<string name="no_file_provided">zip ファイルにファイルが含まれていないよ</string>
<string name="zip_load_failed">zip ファイルを読み込めなかったよ</string>
<string name="androidacy_thanks">Androidacy の一部で開発されています</string>
<string name="api_key_restart">API キーが変更されました。適用をするにはアプリを再起動してください</string>
<string name="api_key_unchanged">入力された API キーは既に使用されている物と同一です</string>
<string name="permission_notification_title">通知を許可しますか\?</string>
<string name="permission_notification_message">アプリとモジュールのアップデート通知を受け取るには通知を許可してください。許可をしない場合はアップデートのチェックは実行されません</string>
<string name="api_key_restart">API キーが変更されたよ。アプリを再起動して変更を適用してね</string>
<string name="api_key_unchanged">入力された API キーはすでに使われているものと同じだよ</string>
<string name="permission_notification_title">通知を許可しますか</string>
<string name="permission_notification_message">アプリとモジュールのアップデート通知を受け取るには通知権限が必要だよ。この権限がなければ自動でアップデートチェックは行われないよ</string>
<string name="permission_notification_grant">権限を付与</string>
<string name="background_update_check_permission_required">このオプションを有効化するには通知を有効化してください</string>
<string name="background_update_check_permission_required">このオプションを有効化するには通知を有効化して</string>
<string name="dont_ask_again">再度質問しない</string>
<string name="force_black_theme_desc">ダークテーマの使用中は強制的に AMOLED ブラック背景を使用します。一部のカラーテーマではコントラストの問題が発生することがあります</string>
<string name="force_black_theme_desc">ダークテーマが使われてる時は強制的に AMOLED ブラック背景を使うよ。いくつかのカラーテーマではコントラストの問題が発生することがあるよ</string>
<string name="force_black_theme_pref">ブラックテーマを強制</string>
<string name="androidacy_repo_disabled">このリポジトリは現在無効化されています</string>
<string name="download_full_app">フルバージョンをダウンロード</string>
<string name="repo_update_failed">一部のリポジトリのアップデートに失敗しました</string>
<string name="crash_reporting_desc">これを無効にすると、開発者にバグ報告がされず、問題の解決が難しくなるかもしれません</string>
<string name="androidacy_failed_to_parse_token">Androidacy からトークンを受け取れませんでした。後ほど再度お試しください</string>
<string name="androidacy_failed_to_validate_token">Androidacy に使用するトークンを検証できませんでした。後ほど再度お試しください</string>
<string name="androidacy_server_down">Androidacy サーバーに接続できませんでした。後ほど再度お試しください</string>
<string name="androidacy_need_captcha">Captcha によって Androidacy のアップデートがブロックされています</string>
<string name="link_copied">リンクをコピーしまし</string>
<string name="androidacy_repo_disabled">このリポジトリは現在無効化されてるよ</string>
<string name="download_full_app">完全バージョンをダウンロード</string>
<string name="repo_update_failed">いくつかのリポジトリのアップデートが失敗したよ</string>
<string name="crash_reporting_desc">これを無効にすると自動でバグレポートが送られず、トラブルシューティングツールが開くことがあるよ</string>
<string name="androidacy_failed_to_parse_token">Androidacy からトークンを受け取れなかったよ。もう一度試してみてね</string>
<string name="androidacy_failed_to_validate_token">Androidacy に使うトークンを検証できなかったよ。もう一度試してみてね</string>
<string name="androidacy_server_down">Androidacy サーバーに接続できなかったよ。接続を確認してもう一度試してみてね</string>
<string name="androidacy_need_captcha">Captcha によって Androidacy のアップデートがブロックされてるよ</string>
<string name="link_copied">リンクをコピーした</string>
<string name="restore_module_list">モジュールを復元</string>
<string name="require_internet">その操作をする為にはインターネット接続が必要です</string>
<string name="require_internet">その操作をするにはインターネットに接続されている必要があるよ</string>
<string name="androidacy_test_mode_pref">Androidacy テストモード</string>
<string name="androidacy_test_mode_desc">リリースエンドポイントの代わりにステージング Androidacy エンドポイントを使用する。(再起動が必要です)</string>
<string name="notification_update_title">%1$d 個のモジュールのアップデートがあります</string>
<string name="notification_update_title_easter_egg">%i 個のモジュールのアップデートを発見しました</string>
<string name="notification_update_subtitle">クリックしてアプリを開く</string>
<string name="androidacy_test_mode_desc">Androidacy のリリースエンドポイントの代わりにステージングエンドポイントを使うよ。(再起動が必要だよ)</string>
<string name="notification_update_title">%1$d 個のモジュールアップデートが見つかったよ</string>
<string name="notification_update_title_easter_egg">%i 個のモジュールアップデートを見つけたよ</string>
<string name="notification_update_subtitle">クリックしてアプリを開く</string>
<string name="notification_update_pref">自動でモジュールのアップデートを確認</string>
<string name="notification_update_desc">バッテリーの減りが早くなる可能性があります</string>
<string name="notification_update_desc">バッテリーの消耗が大きくなることがあるよ</string>
<string name="notification_update_debug_pref">通知をテスト</string>
<string name="language_support_outdated">現在の言語の翻訳の一部は最新ではありません。GitHub からアプリの翻訳にご協力ください</string>
<string name="language_translated_by">翻訳: Fox2Code (Suu, Re*Index.)</string>
<string name="crash_reporting">自動でバグとパフォーマンスを開発者に送信する</string>
<string name="language_support_outdated">いくつかの言語の翻訳は最新ではないことがあるよ。GitHub で翻訳に協力してね</string>
<string name="language_translated_by">Fox2Code による翻訳Suu</string>
<string name="crash_reporting">自動でバグとパフォーマンスをデベロッパーに送信する</string>
<string name="api_key">Androidacy API キー</string>
<string name="validating_api_key">API キーを検証しています…</string>
<string name="api_key_removed">API キーをリセットしました</string>
<string name="save_api_key">検証</string>
<string name="warning">警告!</string>
<string name="androidacy_test_mode_warning">Androidacy の非運用エンドポイントを使用する設定をしています。アプリの動作が不安定になる、リポジトリの読み込みに失敗するなどの不具合が発生する可能性があります。この機能による不具合が発生したとしてもバグの報告はしないでください。リポジトリを再読み込みする為にアプリを再起動します</string>
<string name="crash">テストの為にアプリをクラッシュさせます</string>
<string name="repackaged_as">次のように再パッケージ化:</string>
<string name="warning">注意!</string>
<string name="androidacy_test_mode_warning">Androidacy の開発用エンドポイントが設定されてるよ。これによってアプリが不安定になったり、リポジトリの読み込みに失敗してもバグを報告しないでね。アプリを再起動して再読み込みするよ</string>
<string name="crash">テストのためにアプリをクラッシュさせる</string>
<string name="repackaged_as">次のように再圧縮:</string>
<string name="wrapped_from">次から圧縮済み:</string>
<string name="crash_reporting_restart_title">変更を適用する為にアプリを再起動しますか\?</string>
<string name="crash_reporting_restart_message">この設定を適用する為にはアプリを再起動する必要があります</string>
<string name="crash_reporting_restart_title">変更を適用するためにアプリを再起動する?</string>
<string name="crash_reporting_restart_message">この設定を適用するためにはアプリを再起動する必要があるよ</string>
<string name="restart">再起動</string>
<string name="androidacy_test_mode_disable_warning">ステージングエンドポイントを無効化する為にアプリを再起動します</string>
<string name="install_terminal_reboot_now_message">デバイスを再起動します。今すぐ再起動するにはOKを、再起動しない場合はキャンセルを選択してください</string>
<string name="install_terminal_config_missing">パッケージ %s にモジュール設定が含まれていない為、起動できません</string>
<string name="androidacy_test_mode_disable_warning">開発用エンドポイントを無効化するためにアプリを再起動するよ</string>
<string name="install_terminal_reboot_now_message">デバイスを再起動しようとしているよ。再起動するには OK を選んでね。Cancel を選ぶとキャンセルできるよ</string>
<string name="install_terminal_config_missing">パッケージ %s にモジュール設定が含まれていないので起動できないよ</string>
<string name="clear_app_data">アプリデータをクリア</string>
<string name="clear_data_dialogue_title">アプリデータをクリアしますか\?</string>
<string name="clear_data_dialogue_message">アプリデータをクリアします。操作を確認してください</string>
<string name="setup_background_update_check_summary">バックグラウンドでモジュールとアプリのアップデートを確認します。バッテリーと通信データの使用量が増加することがあります</string>
<string name="clear_data_dialogue_title">アプリデータをクリアしますか</string>
<string name="clear_data_dialogue_message">アプリデータをクリアするよ。この操作を確認してね</string>
<string name="setup_background_update_check_summary">バックグラウンドでモジュールとアプリのアップデートを確認することを許可するよ。バッテリーと通信データを多く消耗することがあるよ</string>
<string name="setup_androidacy_repo">Androidacy リポジトリを有効化</string>
<string name="setup_androidacy_repo_summary">Androidacy によってユーザーレビュー、自動ウイルススキャン、頻度の高い更新、多くのモジュールが提供されています</string>
<string name="setup_androidacy_repo_summary">Androidacy によってユーザーレビュー、自動ウイルススキャン、頻度の高い更新、多くのモジュールが提供されているよ</string>
<string name="setup_magisk_alt_repo">Magisk 代替リポジトリを有効化</string>
<string name="setup_magisk_alt_repo_summary">オリジナルリポジトリよりも多くのモジュールが利用可能ですが、安全でないモジュールが含まれていることがあります</string>
<string name="setup_crash_reporting_summary">クラッシュレポートとパフォーマンスの監視します。すべてのレポートは匿名で機密情報として扱われます</string>
<string name="setup_custom_repos">今後、カスタムリポジトリは設定画面から追加できます</string>
<string name="misc">その他</string>
<string name="setup_magisk_alt_repo_summary">オリジナルのリポジトリよりモジュールの数が多い分、安定性が欠けているものがあるよ</string>
<string name="setup_crash_reporting_summary">クラッシュレポートとパフォーマンスの監視をするよ。すべてのレポートは匿名で機密情報として扱われるよ</string>
<string name="setup_custom_repos">カスタムリポジトリは後で設定から追加できるよ</string>
<string name="misc">いろいろ</string>
<string name="setup_button_skip">スキップ</string>
<string name="low_performance_device_dialogue_title">ローエンドのデバイスでぼかしを有効化</string>
<string name="alt_repo_info">このリポジトリはレビューや制限が少ない為、モジュールの品質が低い可能性があります。必要最小限ですが、多くのモジュールが存在します</string>
<string name="debug_build">これはデバッグ用のビルドです。バグが発生する、パフォーマンスが低下することがあります</string>
<string name="low_performance_device_dialogue_title">ローエンドのデバイスでブラーを有効化</string>
<string name="alt_repo_info">このリポジトリは制限とレビューが少ないため、モジュールの品質が低下する可能性があるよ。必要最小限の機能ですが多くのモジュールがあるよ</string>
<string name="debug_build">これはデバッグ用ビルドだよ。バグやパフォーマンス低下が発生することがあるよ</string>
<string name="androidacy_repo_name">Androidacy リポジトリ</string>
<string name="magisk_alt_repo_name">Magisk 代替リポジトリ</string>
<string name="finish">完了</string>
<string name="setup_theme_system">システムテーマ</string>
<string name="setup_theme_light">ライトテーマ</string>
<string name="setup_theme_dark">ダークテーマ</string>
<string name="setup_theme_transparent_light">透過ライトテーマ - Monet とぼかしが無効化されます!</string>
<string name="setup_theme_transparent_light">透過ライトテーマ - Monet とブラーが無効化されるよ!</string>
<string name="setup_theme_button">テーマ選択</string>
<string name="theme">テーマ</string>
<string name="theme_system">システム</string>
<string name="theme_dark">ダーク</string>
<string name="theme_black">AMOLED ブラック</string>
<string name="theme_light">ライト</string>
<string name="zip_security_warning">%s をインストールしますか\?</string>
<string name="zip_prop_load_failed">モジュールの設定を読み込めませんでした</string>
<string name="zip_security_warning">%s をインストールしますか</string>
<string name="zip_prop_load_failed">モジュールの設定を読み込めなかったよ</string>
<string name="setup_theme_title">テーマを選択</string>
<string name="pref_category_contributors">貢献者</string>
<string name="fox2code_thanks">Fox2Code が作成しまし</string>
<string name="fox2code_thanks">Fox2Code が作成した</string>
<string name="save_logs">ログをストレージに保存して共有</string>
<string name="error_saving_logs">ログを保存できませんでした</string>
<string name="error_saving_logs">ログを保存できなかったよ</string>
<string name="share_logs">FoxMMM のログをシェア</string>
<string name="not_official_build">このアプリは非公式の FoxMMM ビルドです</string>
<string name="repo_update_failed_message">以下のリポジトリのアップデートに失敗しました:
<string name="not_official_build">このアプリは非公式 FoxMMM ビルドだよ</string>
<string name="repo_update_failed_message">以下のリポジトリのアップデートに失敗した:
\n
\n%s</string>
<string name="reset_api_key">API キーをリセット</string>
<string name="reset_api_key">APIキーをリセット</string>
<string name="upgrade_androidacy_promo">プレミアムにアップグレード</string>
<string name="upgrade_androidacy_promo_desc">プレミアムにアップグレードすると、Androidacy リポジトリでの広告とCaptchaの削除、モジュール作者のサポートなどができます</string>
<string name="upgrade_androidacy_promo_desc">プレミアムにアップグレードすると、Androidacy リポジトリでの広告・Captchaの削除、モジュール作者のサポートなどができるようになるよ</string>
<string name="feedback_submit">送信して再起動</string>
<string name="feedback_name">名前(オプション)</string>
<string name="feedback_email">メールアドレス(オプション)</string>
<string name="sentry_dialogue_empty_message">追加のフィードバック情報が入力されていません</string>
<string name="feedback_name">名前 (オプション)</string>
<string name="feedback_email">メールアドレス (オプション)</string>
<string name="sentry_dialogue_empty_message">フィードバックの追加情報がないよ</string>
<string name="crash_icon">クラッシュアイコン</string>
<string name="copy_button">テキストをコピー</string>
<string name="crash_details">原因不明</string>
<string name="more_details">詳細情報は以下で見つけられます</string>
<string name="crash_details">不明な原因</string>
<string name="more_details">詳細情報は以下で見つけられるよ</string>
<string name="crash_full_stacktrace">スタックトレース:
\n%1$s</string>
<string name="sentry_enable_nag">クラッシュレポートは無効化されています。フィードバックを送信するには有効化してください</string>
<string name="sentry_enable_nag">クラッシュレポートが無効化されてるみたいだよ。有効化してフィードバックを送ってね</string>
<string name="reset_app">アプリをリセット</string>
<string name="upgraded_summary">アップグレードしていただきありがとうございます!サブスクリプションに加入して Androidacy をサポートしています</string>
<string name="upgraded_summary">アップグレードありがとう!サブスクリプションで Androidacy をサポートしてるよ</string>
<string name="upgraded">プレミアム有効</string>
<string name="reset_warning">引き続きこの画面が表示される場合、アプリのリセットをお試しください。インストールされているモジュール以外のアプリデータが削除されます</string>
<string name="reset_app_message">アプリデータをすべて削除して終了します。モジュールはアンインストールされません</string>
<string name="reset_warning">もしこの画面の表示が続くようなら、アプリのリセットを試してみてね。アプリデータは削除されるけどモジュールは削除されないよ</string>
<string name="reset_app_message">データをすべて削除してアプリを終了するよ。モジュールは削除されないよ</string>
<string name="reset">リセット</string>
<string name="reset_app_confirmation">アプリデータを完全に削除します。モジュールには影響しません</string>
<string name="error_adding">カスタムリポジトリの追加に失敗しまし</string>
<string name="api_key_mismatch">API キーの形式が無効です</string>
<string name="zip_intent_module_install">本当に ZIP ファイル \"%2$s\" からモジュール \"%1$s\" をインストールしますか\?
<string name="reset_app_confirmation">アプリデータを完全に削除しようとしてるよ。モジュールには影響しないよ</string>
<string name="error_adding">カスタムリポジトリの追加に失敗した</string>
<string name="api_key_mismatch">API キーの形式が無効だよ</string>
<string name="zip_intent_module_install">本当にZIPファイル \"%2$s\" からモジュール \"%1$s\" をインストールしますか
\n
\nモジュールはとても強力で何でもできるため、ソース信頼できるか確認してください。</string>
<string name="fox2code_thanks_desc">Fox2Code はこのアプリの元になったアプリです。それがなければおそらくこのアプリも完成しませんでした</string>
<string name="crash_text">うわっ、何かが間違っています!</string>=
<string name="feedback_message">これが発生した状況と経緯を送信してください。できるだけ詳細にご記入いただくと大変助かります!</string>
<string name="please_feedback">これが発生した経緯を送信してアプリの開発に協力してください</string>
<string name="theme_transparent_dark">ダーク(透過)</string>
\nモジュールはとても強力で何でもできるため、ソース信頼できるか確認してください。</string>
<string name="fox2code_thanks_desc">Fox2Code はこのアプリの元になったアプリだよ。それがなければおそらくこのアプリも完成しなかったよ</string>
<string name="crash_text">うわっ、こんなところに障壁が!</string>=
<string name="feedback_message">詳細情報を送って何が起こったか教えてね。多いほど助かるよ!</string>
<string name="please_feedback">何をしようとしてこうなったのか教えてアプリの改善に協力してほしいな</string>
<string name="theme_transparent_dark">ダーク (透過)</string>
<string name="zip_unpacking">モジュールを検証中…</string>
<string name="warning_message">このモジュールは勝手にインストールされた、または自分自身を隠そうとしています
<string name="warning_message">このモジュールは勝手にインストールされたか、隠れようとしてるよ
\n
\nアンインストールすることを強くおすすめします。</string>
<string name="understand">確認</string>
\nアンインストールすることを強くおすすめするよ</string>
<string name="understand">わかった</string>
<string name="setup_language_button">言語を選択</string>
<string name="title_activity_setup">セットアップ ウィザード</string>
<string name="action_settings">設定</string>
<string name="sentry_dialogue_disabled">クラッシュレポートは無効化されています。フィードバックを送信するには有効化してください</string>
<string name="crash_details_copied">スタックトレースをクリップボードにコピーしました!</string>
<string name="sentry_dialogue_disabled">クラッシュレポートは無効化されてるよ。有効化してフィードバックを送ってね</string>
<string name="crash_details_copied">スタックトレースをクリップボードにコピーしたよ!</string>
<string name="update_debug_download_pref">アップデートのダウンロードメカニズムをテスト</string>
<string name="notification_update_wifi_pref">Wi-Fi または容量無制限のネットワークを使用している場合のみアップデートをチェックします。モバイルデータをお使いの場合、有効化しておくことをおすすめします</string>
<string name="low_quality_module_desc">このモジュールには無効または品質の良くないメタデータが含まれています。モジュールをアンインストールすることをおすすめします。</string>
<string name="notification_update_wifi_pref">アップデートを確認するには Wi-Fi または容量無制限のネットワークを必要とするよ。モバイルデータを使ってるならオンのままにしておくことをおすすめするよ</string>
<string name="low_quality_module_desc">このモジュールには無効または品質が悪いと思われるメタデータが含まれているよ。アンインストールすることをおすすめするよ</string>
<string name="background_update_check_excludes">自動アップデートチェックから除外するモジュール</string>
<string name="title_activity_update">アプリ内アップデータ</string>
<string name="update_title">アプリをアップデート</string>
<string name="update_message">FoxMMM のアップデートをインストールしています。数分かかることがあります</string>
<string name="update_message">FoxMMM のアップデートをインストールしてるよ。数分かかることがあるよ</string>
<string name="update_button">お待ちください…</string>
<string name="error_no_extras">エラー: 起動中に無効なデータを受け取りました</string>
<string name="update_debug_warning">デバッグ用のビルドで実行しています。アプリが自動で更新されないため、手動で更新してください</string>
<string name="error_no_action">エラー: 無効なアクションが指定されました。このアクションを無視して続行します</string>
<string name="update_available">アップデートが見つかりました</string>
<string name="error_no_extras">エラー: 起動時に無効なデータを受け取ったよ</string>
<string name="update_debug_warning">デバッグビルドで実行してるよ。自動でアプリが更新されないので手動で更新してね</string>
<string name="error_no_action">エラー: 無効なアクションが指定されたよ。無視して続けるね</string>
<string name="update_available">アップデートが見つかったよ</string>
<string name="checking_for_update">アップデートを確認しています…</string>
<string name="no_update_available">最新版を利用しています!</string>
<string name="no_update_available">最新版だよ!</string>
<string name="download_update">アップデートをダウンロード</string>
<string name="error_download_update">アップデート情報のダウンロード中にエラーが発生しました。</string>
<string name="error_no_asset">エラー: アップデート情報を取得できませんでした</string>
<string name="error_download_update">アップデート情報のダウンロード中にエラーが発生した</string>
<string name="error_no_asset">エラー: アップデート情報を取得できなかったよ</string>
<string name="downloading_update">アップデートをダウンロードしています... %1$d%%</string>
<string name="installing_update">アップデートをインストールしています…</string>
<string name="no_file_found">エラー: アップデートパッケージが見つかりません</string>
<string name="no_file_found">エラー: アップデートパッケージが見つからなかったよ</string>
<string name="check_for_updates">アプリのアップデートを確認</string>
<string name="notification_update_ignore_desc">モジュールのリストはアップデートチェックから除外されています</string>
<string name="notification_update_ignore_desc">モジュールのリストはアップデートチェックから除外されてるよ</string>
<string name="notification_update_ignore_pref">モジュールを除外</string>
<string name="pref_category_updates">アップデート</string>
<string name="invalid_excludes">無効な入力</string>
<string name="invalid_characters_message">入力されたモジュールリストは無効です。コンマで区切られた ID リストを入力してください</string>
<string name="changelog_none">更新情報はありません!</string>
<string name="invalid_characters_message">入力したモジュールのリストは無効だよ。コンマで区切られた ID リストを入力してね</string>
<string name="changelog_none">まだ変更点がないよ!</string>
<string name="update_cancel_button">アップデートをキャンセル</string>
<string name="invalid_repo_url">入力されたリポジトリの URL 形式が無効です</string>
<string name="add_repo_message">リポジトリは HTTPS に対応している必要があり、ドキュメントに記載されている要件を満たしていなければいけません</string>
<string name="notification_update_summary">以下のモジュールがアップデートされます:</string>
<string name="notification_update_module_template">%1$s をバージョン %2$s へ</string>
<string name="invalid_repo_url">入力したリポジトリのURLは無効だよ</string>
<string name="add_repo_message">リポジトリは HTTPS 対応 とドキュメントに書かれているスペックを満たしている必要があるよ</string>
<string name="notification_update_summary">以下のモジュールがアップデートされるよ:</string>
<string name="notification_update_module_template">%1$s を %2$s へ</string>
<string name="notification_channel_background_update">アップデートを確認しています…</string>
<string name="notification_channel_background_update_description">FoxMMM がバックグラウンドでアップデートを確認しています</string>
<string name="notification_channel_background_update_description">FoxMMM がバックグラウンドでアップデートを確認してるよ</string>
<string name="notification_channel_category_background_update">バックグラウンドアップデートステータス</string>
<string name="notification_channel_category_background_update_description">通知を表示することでアップデートの確認中にシステムからキルされないようにする</string>
<string name="notification_channel_category_background_update_description">通知を表示してアップデートの確認中にキルされないようにする</string>
<string name="notification_update_wifi_desc">WiFi 接続時にのみ確認</string>
<string name="background_update_check_excludes_no_modules">このデバイスにモジュールがインストールされていません</string>
<string name="auto_updates_notifs">モジュールのアップデートが見つかった場合、通知を送信します</string>
<string name="background_update_check_excludes_no_modules">このデバイスにはモジュールがインストールされていないよ</string>
<string name="auto_updates_notifs">モジュールのアップデートが見つかったら通知するよ</string>
<string name="notification_group_updates">アップデート</string>
<string name="online">オンライン</string>
<string name="safe">安全</string>
<string name="safe_module">安全なモジュールとして検証済み</string>
<string name="safe_message">このモジュールは安全なリポジトリから提供され、検証されています。品質、安全対策、ウイルスチェックがされています</string>
<string name="notification_update_app_desc">アプリのアップデートを自動で確認します。ダウンロードは自動で行われません</string>
<string name="safe_message">このモジュールは安全なリポジトリから提供されて検証されているよ。品質、安全対策、ウイルスチェックがされているよ</string>
<string name="notification_update_app_desc">アプリのアップデートを自動で確認するよ。ダウンロードは自動で行われないよ</string>
<string name="notification_update_app_pref">アプリのアップデートを確認</string>
<string name="notification_channel_category_app_update">アプリアップデート</string>
<string name="notification_channel_category_app_update_description">アプリのアップデートが利用可能な場合に通知します</string>
<string name="notification_channel_background_update_app">アプリのアップデートが利用可能です!</string>
<string name="notification_channel_background_update_app_description">FoxMMM のアップデートが利用可能です。ここをタップしてアップデートします</string>
<string name="notification_channel_category_app_update_description">アプリのアップデートがあるときに通知するよ</string>
<string name="notification_channel_background_update_app">アプリのアップデートがあるよ!</string>
<string name="notification_channel_background_update_app_description">FoxMMM のアップデートがあるよ。ここをタップしてアップデートできるよ</string>
<string name="modules">モジュール</string>
<string name="no_browser">ブラウザーがインストールされていません。続行するにはインストールしてください</string>
<string name="no_browser">ブラウザーがインストールされていないよ。続けるにはインストールしてね</string>
<string name="search">検索</string>
<string name="yer_a_wizard_harry">あなたはハリーみたいな魔法使いだよ!</string>
<string name="keep_tapping_to_enter_hogwarts">ホグワーツに入学したいならタップを続けてね!</string>
<string name="crash_reporting_headline">クラッシュレポート</string>
<string name="setup_update_check_headline">アップデートチェック</string>
<string name="setup_background_update_check_require_wifi_summary">アップデートを確認するには Wi-Fi または容量無制限のネットワークに接続してください</string>
<string name="setup_background_update_check_require_wifi">アップデートを確認するには Wi-Fi が必要です</string>
<string name="setup_update_check_headline">アップデート確認</string>
<string name="setup_background_update_check_require_wifi_summary">アップデートを確認するには Wi-Fi または無制限モバイル通信に接続してね</string>
<string name="setup_background_update_check_require_wifi">アップデートを確認するには Wi-Fi が必要だよ</string>
<string name="setup_app_analytics">アプリ解析を許可</string>
<string name="clear_app_cache">アプリキャッシュをクリア</string>
<string name="clear_app_cache_desc">一般的な利用ではキャッシュのクリアは必要ありませんが、一部の問題を修正できる可能性があります</string>
<string name="cache_cleared">キャッシュをクリアしました</string>
<string name="cache_clear_failed">キャッシュのクリアに失敗しました</string>
<string name="clear_app_cache_desc">これは通常必要ないけどいくつかの問題を解決するときに役に立つことがあるよ</string>
<string name="cache_cleared">キャッシュをクリアできたよ</string>
<string name="cache_clear_failed">キャッシュをクリアできなかったよ</string>
<string name="pref_category_privacy">プライバシー</string>
<string name="crash_reporting_pii_desc">追加情報をクラッシュレポートに含めることを許可します。IP アドレスやデバイス情報などの個人情報が含まれることがあります</string>
<string name="clear_cache_dialogue_title">アプリキャッシュをクリアしますか\?</string>
<string name="clear_cache_dialogue_message">アプリキャッシュをクリアします。設定は消去されませんが一部の操作が一時的に遅くなることがあります</string>
<string name="certificate_error">サーバーの証明書が検証されていません。FoxMMM への HTTPS 接続を確認してください</string>
<string name="crash_reporting_pii_desc">追加情報をクラッシュレポートに含めることを許可するよ。IP アドレスやデバイス情報などの個人情報が含まれることがあるよ</string>
<string name="clear_cache_dialogue_title">アプリキャッシュをクリアする?</string>
<string name="clear_cache_dialogue_message">これはアプリキャッシュをクリアするよ。設定は残るけどいくつかの操作で時間がかかることがあるよ</string>
<string name="certificate_error">サーバーの証明書が検証されてないよ。FoxMMM への HTTPS 接続が切断されていないか確認してね</string>
<string name="crash_reporting_pii">追加情報を送信する</string>
<string name="setup_crash_reporting_pii">クラッシュレポートに追加情報を含めて送信します。</string>
<string name="setup_crash_reporting_pii_summary">デバイス情報や IP アドレスが送信されることがあります。クラッシュの解析とパフォーマンスの向上以外に使用されることはありません。</string>
<string name="eula_agree">完了を選択すると、LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.en.html) license and the EULA (https://www.androidacy.com/foxmmm-eula/) ライセンスに同意したことになります</string>
<string name="error_creating_cookie_database">WebView へのアクセス中にエラーが発生しました。予期しない動作が発生する可能性があります。</string>
<string name="setup_scroll_down">完了ボタンを有効化するには、下へスクロールしてすべてのオプションを確認してください。</string>
<string name="empty_field">URL が必要です</string>
<string name="repo_already_added">リポジトリがすでに存在します。</string>
<string name="showcase_mode_dialogue_message">ショーケースモードを有効化するにはアプリを再起動してください。</string>
<string name="other_section">その他</string>
<string name="analytics_desc">アプリの使用状況とインストール済みモジュールの追跡を許可します。GDPR に完全に準拠し、Androidacy によって運営されている Matomo を使用します。</string>
<string name="debug_cat">デバッグ</string>
<string name="announcements">ニュースとアップデート</string>
<string name="back">戻る</string>
<string name="donate_fox">Fox2Code に寄付</string>
<string name="donate_androidacy">Androidacy に寄付</string>
<string name="donate_androidacy_sum">Androidacy のプレミアムサブスクリプションを購入することでこのアプリとリポジトリをサポートすることができます。</string>
<string name="promo_code_copied">コピーされたコードを使用することで初月半額になります!</string>
<string name="warning_pls_restart">一部の設定はアプリの再起動後に適用されます。</string>
<string name="language_not_available">言語 %s はまだ翻訳されていません。翻訳に協力しますか\?</string>
<string name="blur_desc">ブラーエフェクトを一部のダイアログと要素に適用します。一部のデバイスでは動作しないことがあります。</string>
<string name="error_encrypted_shared_preferences">共有設定の読み込み中にエラーが発生しました。アプリをリセットしてください。</string>
<string name="setup_crash_reporting_pii">クラッシュレポートに追加情報を含めて送信するよ。</string>
<string name="setup_crash_reporting_pii_summary">これにはデバイス情報と IP アドレスが含まれることがあるよ。クラッシュの解析とパフォーマンスの向上以外に使用されることはないよ。</string>
</resources>

@ -1,80 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="favourite">मनपर्ने</string>
<string name="uninstall">हटाउने</string>
<string name="description">वर्णन</string>
<string name="language">भाषा</string>
<string name="loading">लोड हुँदैछ …</string>
<string name="installed">जडान गरीएको</string>
<string name="failed_download">फाइल डाउनलोड गर्न सकिएन</string>
<string name="fail_internet">इन्टरनेटमा जडान गर्न सकिएन</string>
<string name="no_web_view">प्रणाली वेवभ्यु खोल्न सकिएन</string>
<string name="app_update_available">एपको नयाँ संस्करण उपलव्ध छ</string>
<string name="app_update">एप अध्यावधिक गर्ने</string>
<string name="no_desc_found">कुनै वर्णन फेला परेन</string>
<string name="website">वेवसाईट</string>
<string name="support">सहायता</string>
<string name="donate">दान गर्नुस्</string>
<string name="update">अध्यावधिक गर्ने</string>
<string name="install">स्थापित गर्ने</string>
<string name="updatable">अध्यावाधिक गर्न योग्य</string>
<string name="pref_category_security">सुरक्षा</string>
<string name="install_terminal_reboot_now">पुनः शुरु गर्ने</string>
<string name="module_stars">ताराहरू:</string>
<string name="pref_category_info">जानकारी</string>
<string name="master_delete_no">राख्ने</string>
<string name="master_delete_yes">मेटाउने</string>
<string name="pref_category_appearance">हुलिया</string>
<string name="licenses">अनुमतिपत्रहरु</string>
<string name="module_min_magisk_chip">न्युनतम म्याजिस्क %s</string>
<string name="module_min_sdk_chip">न्युनतम एन्ड्रोइड</string>
<string name="module_max_sdk_chip">अधिकतम एन्ड्रोइड</string>
<string name="restart">पुनः शुरु गर्ने</string>
<string name="download_full_app">पूर्ण संस्करण डाउनलोड गर्नुहोस्</string>
<string name="permission_notification_grant">स्विकृति दिने</string>
<string name="dont_ask_again">अव फेरी नसोध</string>
<string name="misc">विविध</string>
<string name="submit">वुझाउने</string>
<string name="sentry_dialogue_failed_toast">एउटा त्रुटि को कारण प्रतिकृया वुझाउन सकिएन</string>
<string name="additional_info">के भएको थियो हामीलाई भन्नुहोस्</string>
<string name="email">तपाईको इमेल</string>
<string name="name">तपाईको नाम</string>
<string name="setup_background_update_check">स्वचालित उध्यावधिक जाँच</string>
<string name="theme_system">प्रणाली</string>
<string name="theme_dark">अँध्यारो</string>
<string name="theme_black">एमोलेड कालो</string>
<string name="theme_light">उज्यालो</string>
<string name="language_cta">तपाईंको भाषा देख्नुभएन\?</string>
<string name="language_cta_desc">यसलाई अनुवाद गरेर हामीलाई मद्दत गर्नुहोस्! अझ बढि जान्न यहाँ थिच्नुहोस् ।</string>
<string name="zip_load_failed">जिप फाइल लोड गर्न सकिएन</string>
<string name="understand">मैले बुझें</string>
<string name="setup_theme_title">सार छान्नुहोस्</string>
<string name="safe">सुरक्षित</string>
<string name="show_licenses">अनुमतिपत्रहरू देखाउने</string>
<string name="module_last_update">अन्तिम अध्यावधिक:</string>
<string name="setup_language_button">भाषा छान्नुहोस्</string>
<string name="androidacy_update_needed">यो एप पुरानो भएको छ ।</string>
<string name="androidacy_update_needed_message">कृपया यो एपलाई नयां संस्करणमा अध्यावधिक गर्नुहोस ।</string>
<string name="zip_security_warning">%s स्थापित गर्ने\?</string>
<string name="update_button">कृपया पर्खनुहोस् …</string>
<string name="repo_update_failed_extended">%1$s को अध्यावधिक सफल भएन । कृपया पछि पुनः प्रयास गर्नुहोस् ।</string>
<string name="sentry_dialogue_success">प्रतिकृया सफलतापूर्वक बुझाईयो । हामी छिटै पुनरावृति गर्नेछौं</string>
<string name="other_section">अन्य</string>
<string name="pref_category_general">सामान्य</string>
<string name="please_wait">कृपया पर्खनुहोस्</string>
<string name="warning">चेतावनि!</string>
<string name="sentry_dialogue_no_description">कुनै विवरण उपलब्ध नभएकाले प्रतिकृया वुझाउन सकिएन</string>
<string name="official">वैधानिक</string>
<string name="unofficial">अवैधानिक</string>
<string name="update_available">अध्यावधिक भेटियो</string>
<string name="pref_category_updates">अध्यावधिकहरु</string>
<string name="pref_category_privacy">गोपनियता</string>
<string name="setup_update_check_headline">अध्यावधिक जांचहरू</string>
<string name="notification_channel_category_app_update">एप अध्यावधिकहरु</string>
<string name="notification_group_updates">अध्यावधिकहरू</string>
<string name="notification_update_app_pref">एप अध्यावधिकहरु जाँच गर्नुहोस्</string>
<string name="notification_channel_background_update">अध्यावधिक हरुको लागि जाँच गर्दै …</string>
<string name="download_update">अध्यावधिक डाउनलोड गर्ने</string>
<string name="error_download_update">अध्यावधिकको जानकारी डाउनलोड गर्दा एउटा त्रुटि भयो ।</string>
<string name="notification_update_subtitle">एप खोल्न क्लिकगर्नुहोस्</string>
</resources>
<resources></resources>

@ -60,12 +60,12 @@
<string name="prevent_reboot_pref">Uniemożliwiaj restart</string>
<string name="prevent_reboot_desc">Zapobiega niespodziewanym restartom urządzenia po instalacji modułu</string>
<string name="pref_category_settings">Ustawienia</string>
<string name="enable_monet">Włącz Monet</string>
<string name="enable_monet">Wygląd Material You</string>
<string name="pref_category_info">Informacje</string>
<string name="show_licenses">Pokaż licencje</string>
<string name="licenses">Licencje</string>
<string name="show_incompatible_pref">Pokaż niekompatybilne moduły</string>
<string name="show_incompatible_desc">Wyświetl moduły niezgodne z tym urządzeniem na podstawie ich metadanych</string>
<string name="show_incompatible_desc">Wyświetla niekompatybilne moduły z tym urządzeniem na podstawie ich metadanych</string>
<string name="magisk_outdated">Pojawiła się nowa wersja Magiska do zainstalowania!</string>
<string name="pref_category_repos">Repozytoria</string>
<string name="pref_category_security">Zabezpieczenia</string>
@ -124,7 +124,7 @@
<string name="notification_update_title">Dostępne są nowe wersje modułów: %1$d</string>
<string name="notification_update_title_easter_egg">Wywęszono nowe wersje modułów: %i</string>
<string name="notification_update_subtitle">Kliknij, aby otworzyć aplikację</string>
<string name="notification_update_pref">Sprawdzaj aktualizacje modułów</string>
<string name="notification_update_pref">Sprawdzanie aktualizacji modułów</string>
<string name="notification_update_desc">Może zwiększyć użycie baterii</string>
<string name="notification_update_debug_pref">Powiadomienie testowe</string>
<!-- Set to true in translation file if your language is right to left -->
@ -142,7 +142,7 @@
<string name="api_key_set">Bieżący klucz API Androidacy</string>
<string name="api_key_invalid">Nie można zweryfikować klucza API. Proszę sprawdzić i spróbować ponownie.</string>
<string name="api_key_valid">Klucz API jest prawidłowy.</string>
<string name="checking_api_key">Weryfikacja klucza API…</string>
<string name="checking_api_key">Sprawdzanie klucza API…</string>
<string name="validating_api_key">Weryfikacja klucza API…</string>
<string name="please_wait">Proszę czekać</string>
<string name="api_key_removed">Zresetowano klucz API</string>
@ -175,7 +175,7 @@
<string name="permission_notification_message">Jeżeli nie udzielisz tego uprawnienia, to nie otrzymasz informacji o nowych wersjach aplikacji i modułów.</string>
<string name="androidacy_repo_disabled_message">W tej kompilacji brakuje kluczy klienckich dla repo Androidacy. Pobierz wydanie GitHub, jeżeli chcesz skorzystać z tego repozytorium.</string>
<string name="repo_update_failed_extended">Aktualizacja %1$s nie powiodła się. Proszę spróbować ponownie później.</string>
<string name="monet_disabled_summary">Monet nie jest kompatybilny z przezroczystymi motywami.</string>
<string name="monet_disabled_summary">Wygląd Material You nie jest kompatybilny z przezroczystymi motywami.</string>
<string name="blur_disabled_summary">Rozmycie nie jest kompatybilne z przezroczystymi motywami.</string>
<string name="transparent_theme_dialogue_title">Ustawiasz przezroczysty motyw</string>
<string name="custom_repo_always_on">Niestandardowe repozytoria są zawsze włączone, dopóki ich nie usuniesz.</string>
@ -201,7 +201,7 @@
<string name="setup_button_skip">Pomiń</string>
<string name="low_performance_device_dialogue_title">Włączanie rozmycia na słabszych urządzeniach</string>
<string name="alt_repo_info">To repo ma mniej ograniczeń i recenzji, co może prowadzić do niższej jakości modułów. Baza modułów jest znacznie większa.</string>
<string name="transparent_theme_dialogue_message">Przezroczyste motywy mogą wykazywać pewne niespójności i mogą nie działać na wszystkich ROM-ach. Monet i rozmycie zostaną wyłączone. Możesz je przywrócić w dowolnym momencie.</string>
<string name="transparent_theme_dialogue_message">Przezroczyste motywy mogą wykazywać pewne niespójności i mogą nie działać na wszystkich ROM-ach. Dodatkowo, wygląd Material You i rozmycie zostaną wyłączone. Możesz je przywrócić w dowolnym momencie.</string>
<string name="sentry_dialogue_message">Napotkaliśmy błąd! Prosimy o pomoc w ulepszeniu aplikacji poprzez dodanie informacji o błędzie poniżej.
\nImię i e-mail są opcjonalne, ale pozwolą nam skontaktować się z Tobą w razie potrzeby uzyskania dodatkowych informacji.</string>
<string name="unofficial">Nieoficjalna</string>
@ -231,7 +231,7 @@
<string name="setup_theme_system">Zgodny z systemem</string>
<string name="setup_theme_light">Jasny</string>
<string name="setup_theme_black">Czarny</string>
<string name="setup_theme_transparent_light">Przezroczysty (jasny) - Wyłączy Monet i rozmycie!</string>
<string name="setup_theme_transparent_light">Przezroczysty (jasny) - Wyłączy Material You i rozmycie!</string>
<string name="theme">Motyw</string>
<string name="theme_system">Zgodny z systemem</string>
<string name="theme_black">Czarny</string>
@ -387,9 +387,4 @@
<string name="announcements">Wiadomości i aktualizacje</string>
<string name="back">Wróć</string>
<string name="debug_cat">Debugowanie</string>
<string name="donate_fox">Wesprzyj Fox2Code</string>
<string name="donate_androidacy">Wesprzyj Androidacy</string>
<string name="donate_androidacy_sum">Kup subskrypcję premium na Androidacy, aby wspierać aplikację i repo.</string>
<string name="promo_code_copied">Użyj skopiowanego kodu, aby uzyskać połowę zniżki na swój pierwszy miesiąc!</string>
<string name="warning_pls_restart">Niektóre ustawienia zadziałają dopiero po restarcie aplikacji.</string>
</resources>

@ -342,7 +342,7 @@
<string name="notification_channel_background_update">Buscando por atualizações…</string>
<string name="notification_channel_background_update_description">FoxMMM está buscando por atualizações em segundo plano.</string>
<string name="notification_channel_category_background_update">Estado da atualização em segundo plano</string>
<string name="notification_update_wifi_desc">Buscar somente via WiFi</string>
<string name="notification_update_wifi_desc">Apenas verificar via WiFi</string>
<string name="notification_update_wifi_pref">Exigir wi-fi ou uma conexão ilimitada para buscar por atualizações. É recomendado manter ativo se você possui dados móveis limitados.</string>
<string name="background_update_check_excludes_no_modules">Nenhum módulo instalado no dispositivo</string>
<string name="auto_updates_notifs">Notifica quando atualizações de módulos forem encontradas</string>
@ -385,15 +385,10 @@
<string name="setup_background_update_check_require_wifi_summary">Exigir wifi ou uma conexão ilimitada para buscar por atualizações</string>
<string name="clear_cache_dialogue_message">Isso irá limpar o cache do aplicativo. Suas preferências serão salvas, mas o aplicativo poderá demorar para realizar algumas operações temporariamente.</string>
<string name="showcase_mode_dialogue_message">Uma reinicialização é necessária para ativar o modo showcase.</string>
<string name="other_section">Outros</string>
<string name="analytics_desc">Nos permite monitorar o uso e instalação do app. Totalmente conforme o GDPR, utilizando Matomo, hospedado pelo Androidacy.</string>
<string name="other_section">Outro</string>
<string name="analytics_desc">Nós permite analizar dados de uso e instalação do app. Totalmente conforme o GDPR e usa Matomo, hospedado pela Androidacy.</string>
<string name="debug_cat">Depuração</string>
<string name="announcements">Novidades e atualizações</string>
<string name="back">Voltar</string>
<string name="eula_agree">Ao clicar em finalizar, você está concordando com os termos da licença LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.en.html) e sua EULA (https://www.androidacy.com/foxmmm-eula/)</string>
<string name="donate_fox">Doar para Fox2Code</string>
<string name="donate_androidacy">Doar para Androidacy</string>
<string name="donate_androidacy_sum">Comprar uma assinatura premium do Androidacy para dar suporte ao aplicativo e ao repositório.</string>
<string name="promo_code_copied">Utilize o código copiado para obter um desconto de 50% no seu primeiro mês!</string>
<string name="warning_pls_restart">Por favor, lembre-se que algumas configurações não terão efeito até que reinicie o aplicativo.</string>
<string name="eula_agree">Ao tocar finalizar, você está concordando a ser vinculado a licensa LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.en.html) e sua EULA (https://www.androidacy.com/foxmmm-eula/)</string>
</resources>

@ -265,7 +265,7 @@
<string name="notification_channel_category_background_update">Estado da atualização em segundo plano</string>
<string name="reset_app_message">Isso irá completamente remover todos os dados do aplicativo e encerrá-lo. Módulos não serão desinstalados.</string>
<string name="keep_tapping_to_enter_hogwarts">Continue pressionando para ser admitido em Hogwarts!</string>
<string name="notification_update_wifi_desc">Buscar somente via WiFi</string>
<string name="notification_update_wifi_desc">Apenas verificar via WiFi</string>
<string name="background_update_check_excludes_no_modules">Nenhum módulo instalado no dispositivo</string>
<string name="auto_updates_notifs">Notifica quando atualizações de módulos forem encontradas</string>
<string name="notification_group_updates">Atualizações</string>
@ -371,16 +371,4 @@
<string name="language_support_outdated">Algumas traduções para seu idioma atual não estão atualizadas. Por favor, considere contribuir para as traduções do aplicativo no GitHub</string>
<string name="androidacy_test_mode_warning">Você está configurando o aplicativo para usar um servidor de testes do Androidacy. Isso pode resultar em instabilidade no aplicativo e falha ao carregar o repositório online. NÃO reporte falhas se você tiver esta opção habilitada. O aplicativo será reinicializado para recarregar os repositórios.</string>
<string name="fox2code_thanks_desc">Fox2Code é o desenvolvedor original do aplicativo. Sem ele, isso nunca seria possível.</string>
<string name="showcase_mode_dialogue_message">Uma reinicialização é necessária para ativar o modo showcase.</string>
<string name="other_section">Outros</string>
<string name="eula_agree">Ao clicar em finalizar, você está concordando com os termos da licença LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.en.html) e sua EULA (https://www.androidacy.com/foxmmm-eula/)</string>
<string name="analytics_desc">Nos permite monitorar o uso e instalação do app. Totalmente conforme o GDPR, utilizando Matomo, hospedado pelo Androidacy.</string>
<string name="debug_cat">Depuração</string>
<string name="announcements">Novidades e atualizações</string>
<string name="back">Voltar</string>
<string name="donate_fox">Doar para Fox2Code</string>
<string name="donate_androidacy">Doar para Androidacy</string>
<string name="donate_androidacy_sum">Comprar uma assinatura premium do Androidacy para dar suporte ao aplicativo e ao repositório.</string>
<string name="promo_code_copied">Utilize o código copiado para obter um desconto de 50% no seu primeiro mês!</string>
<string name="warning_pls_restart">Por favor, lembre-se que algumas configurações não terão efeito até que reinicie o aplicativo.</string>
</resources>

@ -386,5 +386,4 @@
<string name="donate_androidacy_sum">Купите премиальную подписку на Androidacy, чтобы поддерживать приложение и репозиторий.</string>
<string name="promo_code_copied">Используйте скопированный код и получите половину скидки на первый месяц!</string>
<string name="warning_pls_restart">Обратите внимание, что некоторые настройки могут не вступить в силу, пока вы не перезапустите приложение.</string>
<string name="reinstall">Переустановить</string>
</resources>

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

@ -142,7 +142,7 @@
<integer name="language_support_level">1</integer>
<string name="language_support_outdated">Mevcut dil için bazı çeviriler güncel değil, lütfen GitHub\'daki uygulama çevirilerine katkıda bulunmayı düşünün</string>
<!-- Replace with your own username when translating -->
<string name="language_translated_by">tarafından çevrildi</string>
<string name="language_translated_by">Alprnn357 tarafından çevrildi</string>
<string name="crash_reporting">Geliştiricilere performans ve hataları otomatik olarak bildir</string>
<string name="crash_reporting_desc">Bunu devre dışı bırakırsanız geliştirici otomatik hata raporları almayacak ve bu, sorunları çözmeyi zorlaştırabilir</string>
<string name="api_key">Androidacy API Anahtarı</string>

@ -319,7 +319,7 @@
<string name="changelog_none">Змін ще немає!</string>
<string name="update_cancel_button">Скасувати оновлення</string>
<string name="invalid_repo_url">URL-адреса, яку ви ввели для репозиторію, недійсна</string>
<string name="add_repo_message">Репозиторії повинні обслуговуватися за допомогою HTTPS і відповідати специфікаціям, викладеним у <a href="https://github.com/Androidacy/MagiskModuleManager/blob/master/docs/DEVELOPERS.md#custom-repo-format">документації</a>.</string>
<string name="add_repo_message">Репозиторії повинні обслуговуватися за допомогою HTTPS і відповідати специфікаціям, викладеним у <a href="https://github.com/Fox2Code/FoxMagiskModuleManager/blob/master/docs/DEVELOPERS.md#custom-repo-format">документації</a>.</string>
<string name="notification_update_summary">Наступні модулі можуть бути оновлені:</string>
<string name="notification_update_module_template">%1$s до версії %2$s</string>
<string name="notification_channel_background_update">Перевірка оновлень…</string>
@ -378,10 +378,4 @@
<string name="announcements">Новини та оновлення</string>
<string name="back">Назад</string>
<string name="analytics_desc">Дозвольте нам відстежувати використання та встановлення додатку. Повністю відповідає GDPR і використовує Matomo, розміщений на Androidacy.</string>
<string name="donate_fox">Донат на Fox2Code</string>
<string name="donate_androidacy">Дотан на Androidacy</string>
<string name="donate_androidacy_sum">Придбайте преміальну підписку на Androidacy, щоб підтримувати додаток і репозиторій.</string>
<string name="promo_code_copied">Використовуйте скопійований код, щоб отримати половину знижки за перший місяць!</string>
<string name="warning_pls_restart">Зверніть увагу, що деякі налаштування можуть не робити, доки ви не перезавантажите додаток.</string>
<string name="reinstall">Перевстановити</string>
</resources>

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="gray_200">#C8C8C8</color>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>

@ -1,10 +1,10 @@
<resources>
<style name="Theme.MagiskModuleManager.Monet.Light" parent="Theme.Material3.DynamicColors.Light">
<item name="android:statusBarColor">@color/status_bar_color_light</item>
<item name="colorBackgroundFloating">@color/system_accent1_50</item>
<item name="android:statusBarColor">@color/status_bar_color</item>
<item name="colorBackgroundFloating">@color/system_accent2_10</item>
<item name="android:windowBackground">@color/system_neutral1_10</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Assist.Elevated</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Choice.Light</item>
<!-- fix bottom navigation bar color -->
<item name="android:navigationBarColor">@color/system_accent2_100</item>
<!-- fonts -->
@ -14,9 +14,6 @@
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:actionBarStyle">@style/Theme.Design.NoActionBar</item>
<item name="cornerRadius">@dimen/card_corner_radius</item>
<item name="alertDialogTheme">@style/Theme.MagiskModuleManager.AlertDialog</item>
</style>
<style name="Widget.Material3.Chip.Choice.Light" parent="Widget.Material3.Chip.Assist">
@ -29,7 +26,7 @@
<item name="android:statusBarColor">@color/status_bar_color</item>
<item name="colorBackgroundFloating">@color/system_neutral1_800</item>
<item name="android:windowBackground">@color/system_neutral1_900</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Assist.Elevated</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Choice.Dark</item>
<!-- fonts -->
<item name="android:fontFamily">@font/inter</item>
<item name="font">@font/inter</item>
@ -37,9 +34,6 @@
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:actionBarStyle">@style/Theme.Design.NoActionBar</item>
<item name="cornerRadius">@dimen/card_corner_radius</item>
<item name="alertDialogTheme">@style/Theme.MagiskModuleManager.AlertDialog</item>
</style>
<!-- Black monet theme, which is just dark monet theme with black background -->
@ -58,7 +52,7 @@
<item name="chipBackgroundColor">@color/system_accent2_700</item>
<item name="chipSurfaceColor">@color/system_accent2_700</item>
<!-- chips should be dark, not black -->
<item name="chipStyle">@style/Widget.Material3.Chip.Assist.Elevated</item>
<item name="chipStyle">@style/Widget.Material.Chip.Choice.Black</item>
<!-- fonts -->
<item name="android:fontFamily">@font/inter</item>
<item name="font">@font/inter</item>
@ -66,9 +60,6 @@
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:actionBarStyle">@style/Theme.Design.NoActionBar</item>
<item name="cornerRadius">@dimen/card_corner_radius</item>
<item name="alertDialogTheme">@style/Theme.MagiskModuleManager.AlertDialog</item>
</style>
<style name="Widget.Material3.Chip.Choice.Dark" parent="Widget.Material3.Chip.Assist">

@ -217,7 +217,7 @@
<string name="low_performance_device_dialogue_title">在低配设备上启用模糊</string>
<string name="low_performance_device_dialogue_message">您正在尝试在可能无法正常运行的设备上启用模糊。
\n启用它可能会导致糟糕的用户体验我们建议您不要这样做。</string>
<string name="alt_repo_info">仓库的限制和审核较少,因而导致模块质量较低,但模块数量很多。</string>
<string name="alt_repo_info">仓库的限制和审核较少,因而导致模块质量较低。虽然系统较为简单,但模块数量较多。</string>
<string name="install_terminal_reboot_now_message">您即将重启您的设备。如果你已经准备好了,点击确定继续重启。 否则,请点击取消。</string>
<string name="install_terminal_config_missing">包 %s 缺少模块的配置,因此我们无法运行它。</string>
<string name="clear_app_data">清除应用数据</string>
@ -387,15 +387,4 @@
<string name="language_not_available">%s 尚未被翻译。 帮忙翻译一下\?</string>
<string name="blur_desc">在某些对话框和元素后面创建模糊效果。 请注意,模糊可能在某些设备上表现不佳并且可能不适用于所有人。</string>
<string name="error_encrypted_shared_preferences">读取共享首选项时出错。 请重置应用程序。</string>
<string name="other_section">其他</string>
<string name="eula_agree">单击完成,即表示您同意受 LGPL-3 的约束(https://www.gnu.org/licenses/lgpl-3.0.en.html) license and the EULA (https://www.androidacy.com/foxmmm-eula/)</string>
<string name="analytics_desc">允许我们跟踪应用程序的使用和安装。完全符合 GDPR 并使用由 Androidacy 托管的 Matomo。</string>
<string name="debug_cat">调试</string>
<string name="announcements">消息和更新</string>
<string name="back">返回</string>
<string name="donate_fox">向 Fox2Code 捐赠</string>
<string name="donate_androidacy">向 Androidacy 捐赠</string>
<string name="donate_androidacy_sum">购买 Androidacy premium 订阅以支持应用和仓库。</string>
<string name="promo_code_copied">使用复制的代码,第一个月可享受半价优惠!</string>
<string name="warning_pls_restart">请注意,某些设置可能在您重新启动应用程序后才会生效。</string>
</resources>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">Fox Magisk 模組管理器</string>
<string name="app_name">Fox\'s Magisk 模組管理器</string>
<string name="app_name_short">Fox\'s Mmm</string>
<string name="fail_root_magisk">無法取得 ROOT 權限或您並沒有裝 Magisk</string>
<string name="loading">讀取中請稍後…</string>
@ -264,7 +264,7 @@
<string name="safe_message">這個模組已被倉庫認證為安全的,表示它通過某種程度的質量以及安全檢查,也通過了病毒檢測。</string>
<string name="background_update_check_excludes">要從自動更新檢查除開的模組</string>
<string name="update_title">更新應用程式</string>
<string name="update_button">請稍等</string>
<string name="update_button">請稍等...</string>
<string name="setup_magisk_alt_repo_summary">比原版的規範寬鬆。有大量的模組,不過安全性較低。</string>
<string name="setup_crash_reporting_summary">錯誤回報以及效能分析回傳。所有提交的報告將會嚴格保證匿名且私密。</string>
<string name="pref_category_contributors">貢獻者</string>
@ -345,7 +345,7 @@
<string name="add_repo_message">倉庫必須使用HTTPS並且遵循文檔內列出的規範。</string>
<string name="notification_update_summary">以下模組可以更新:</string>
<string name="notification_update_module_template">%1$s 到 版本 %2$s</string>
<string name="notification_channel_background_update">檢查更新中</string>
<string name="notification_channel_background_update">檢查更新中...</string>
<string name="notification_channel_background_update_description">FoxMMM在後台檢查更新中。</string>
<string name="notification_channel_category_background_update">後台更新狀態</string>
<string name="notification_channel_category_background_update_description">在檢查更新時顯示一個通知,不讓系統自動結束進程</string>
@ -361,40 +361,4 @@
<string name="notification_channel_category_app_update_description">當應用程式有更新時通知</string>
<string name="notification_channel_background_update_app">應用有新的更新!</string>
<string name="notification_channel_background_update_app_description">FoxMMM有更新。點擊安裝更新。</string>
<string name="crash_reporting_headline">錯誤回報</string>
<string name="setup_update_check_headline">更新檢查</string>
<string name="setup_background_update_check_require_wifi">僅透過WiFi來檢查更新</string>
<string name="setup_background_update_check_require_wifi_summary">僅透過WiFi或者無流量限制的連線來檢查更新</string>
<string name="setup_app_analytics">允許應用分析回報</string>
<string name="clear_app_cache">清楚應用快取</string>
<string name="clear_app_cache_desc">一般來說這不是必要的,不過可能可以解決部分遇到的問題。</string>
<string name="cache_cleared">快取清除完成</string>
<string name="cache_clear_failed">快取清除失敗</string>
<string name="clear_cache_dialogue_title">清除應用快取?</string>
<string name="clear_cache_dialogue_message">這將會清除應用快取。你的設定將會被保留,不過其他應用相關功能可能會暫時性的需要更長時間來處理。</string>
<string name="certificate_error">伺服器憑證無法被驗證。請確保FoxMMM的HTTPS請求沒有被攔截。</string>
<string name="pref_category_privacy">隱私</string>
<string name="crash_reporting_pii_desc">允許在發生錯誤報告時附帶更多資訊其中可能包含可個人識別化的資料例如IP地址以及終端識別碼。</string>
<string name="crash_reporting_pii">發送詳細資料</string>
<string name="setup_crash_reporting_pii">在錯誤回報中發送更詳細的資料。</string>
<string name="setup_crash_reporting_pii_summary">這可能會包含IP地址以及終端識別碼。收到的資料將不會用作分析錯誤以及提升服務品質以外的任何用途。</string>
<string name="setup_scroll_down">要完成的按鈕開啟,請滑下去並檢視所有選項。</string>
<string name="empty_field">URL不能為空</string>
<string name="repo_already_added">倉庫已存在。</string>
<string name="other_section">其他</string>
<string name="analytics_desc">允許我們追踪應用的使用以及安裝。完全支援並符合GDPR且使用Androidacy運營的Matomo。</string>
<string name="debug_cat">偵錯</string>
<string name="announcements">消息與更新</string>
<string name="back">返回</string>
<string name="error_creating_cookie_database">無法訪問WebView。功能將會受限制。</string>
<string name="showcase_mode_dialogue_message">啟用展示模式需要重新啟動應用。</string>
<string name="eula_agree">點擊完成按鈕的當下,你表明了你同意遵守以及被約束於條約之規範。本條約含 LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.en.html) 許可以及 EULA (https://www.androidacy.com/foxmmm-eula/)</string>
<string name="donate_fox">捐款給 Fox2Code</string>
<string name="donate_androidacy">捐款給 Androidacy</string>
<string name="donate_androidacy_sum">訂閱 Androidacy 的高級會員來支持應用以及倉庫。</string>
<string name="promo_code_copied">使用複製的優惠卷來取得首月半價優惠!</string>
<string name="warning_pls_restart">某些設定在重啟應用後方能生效。</string>
<string name="language_not_available">%s 還尚未被翻譯。來一起翻譯吧?</string>
<string name="blur_desc">在某些視窗以及元素啟用模糊效果。這個功能可能在某些裝置上運行效果不佳或完全無法使用。</string>
<string name="error_encrypted_shared_preferences">加載共同設定失敗。請重置本應用。</string>
</resources>

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="gray_200">#C8C8C8</color>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
@ -15,7 +14,6 @@
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="status_bar_color">@color/black_transparent</color>
<color name="status_bar_color_light">@color/white_transparent</color>
<color name="module_holder_div">@color/black_transparent</color>
<!-- Icon -->
<color name="launcher_icon_background">#FF9B08</color>

@ -403,8 +403,6 @@
<string name="showcase_mode_dialogue_message">An app restart is required to enable showcase mode.</string>
<string name="other_section">Other</string>
<string name="eula_agree">By clicking "finish", you are agreeing to be bound by the LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.en.html) license and the EULA (https://www.androidacy.com/foxmmm-eula/)</string>
<string name="eula_agree_v2">You agree to be bound by the LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.en.html) license and the EULA (https://www.androidacy.com/foxmmm-eula/), in addition to any third party terms, and that the authors of this app bear no responsibility of your usage of it, nor do we offer any warranties express or implied.</string>
<string name="eula_sum">I agree to the EULA and License</string>
<string name="analytics_desc">Allow us to track app usage and installs. Fully GDPR compliant and uses Matomo, hosted by Androidacy.</string>
<string name="debug_cat">Debugging</string>
<string name="announcements">News and updates</string>
@ -414,6 +412,4 @@
<string name="donate_androidacy_sum">Buy a premium subscription to Androidacy to support the app and the repo.</string>
<string name="promo_code_copied">Use the copied code for half off your first month!</string>
<string name="warning_pls_restart">Please note that some settings may not take effect until you restart the app.</string>
<string name="reinstall">Reinstall</string>
<string name="setup_scroll_down_v2">To enable the finish button, scroll to the bottom and acknowledge you have read and agree to the EULA and license(s).</string>
</resources>

@ -24,10 +24,11 @@
<item name="android:activityCloseExitAnimation">@*android:anim/slide_out_right</item> -->
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
<item name="android:dialogCornerRadius" tools:targetApi="p">@dimen/card_corner_radius</item>
<item name="dialogCornerRadius">@dimen/card_corner_radius</item>
<item name="colorBackgroundFloating">@color/light_colorBackgroundFloating</item>
<item name="backgroundColor">@color/light_backgroundColor</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Assist.Elevated</item>
<item name="android:actionBarStyle">@style/Theme.Design.NoActionBar</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Choice.Light</item>
<!-- fonts -->
<item name="android:fontFamily">@font/inter</item>
<item name="font">@font/inter</item>
@ -35,7 +36,6 @@
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="cornerRadius">@dimen/card_corner_radius</item>
</style>
<style name="Widget.Material3.Chip.Choice.Light" parent="Widget.Material3.Chip.Assist">
@ -58,10 +58,10 @@
<item name="android:textColor">@color/white</item>
<item name="titleTextColor">@color/white</item>
<!-- Fix action bar padding in transparent theme -->
<item name="android:actionBarStyle">@style/Theme.Design.NoActionBar</item>
<item name="android:actionBarStyle">@style/Widget.Material3.ActionBar.Solid</item>
<!-- Action bar -->
<item name="actionBarStyle">@style/Theme.Design.NoActionBar</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Assist.Elevated</item>
<item name="actionBarStyle">@style/Widget.Material3.ActionBar.Solid</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Choice.Light</item>
<!-- fonts -->
<item name="android:fontFamily">@font/inter</item>
<item name="font">@font/inter</item>
@ -69,8 +69,6 @@
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="cornerRadius">@dimen/card_corner_radius</item>
<item name="alertDialogTheme">@style/Theme.MagiskModuleManager.AlertDialog</item>
</style>
<style name="Theme.MagiskModuleManager.Dark" parent="Theme.Material3.Dark">
@ -97,9 +95,10 @@
<item name="android:activityCloseExitAnimation">@*android:anim/slide_out_right</item> -->
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
<item name="android:dialogCornerRadius" tools:targetApi="p">@dimen/card_corner_radius</item>
<item name="dialogCornerRadius">@dimen/card_corner_radius</item>
<item name="colorBackgroundFloating">@color/dark_colorBackgroundFloating</item>
<item name="backgroundColor">@color/dark_backgroundColor</item>
<item name="android:actionBarStyle">@style/Theme.Design.NoActionBar</item>
<!-- fonts -->
<item name="android:fontFamily">@font/inter</item>
<item name="font">@font/inter</item>
@ -107,15 +106,14 @@
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="cornerRadius">@dimen/card_corner_radius</item>
<item name="alertDialogTheme">@style/Theme.MagiskModuleManager.AlertDialog</item>
</style>
<!-- Black theme, which is just a dark theme with a black background -->
<style name="Theme.MagiskModuleManager.Black" parent="Theme.MagiskModuleManager.Dark">
<item name="colorBackgroundFloating">@color/gray_900</item>
<item name="colorBackgroundFloating">@color/black</item>
<item name="android:windowBackground">@color/black</item>
<item name="boxBackgroundColor">@color/black</item>
<item name="cardBackgroundColor">@color/black</item>
<item name="backgroundColor">@color/black</item>
<item name="colorSurface">@color/black</item>
<!-- Darker variants of the colors -->
@ -123,13 +121,13 @@
<item name="colorPrimaryVariant">@color/orange_700</item>
<item name="colorSecondary">@color/orange_500</item>
<item name="colorSecondaryVariant">@color/orange_700</item>
<!-- Fix some unthemed dialogs -->
<item name="android:colorAccent">@color/orange_200</item>
<item name="android:colorBackground">@color/black</item>
<item name="android:colorForeground">@color/white</item>
<item name="android:colorBackgroundCacheHint">@null</item>
<!-- chips should be dark, not black -->
<item name="android:actionBarStyle">@style/Theme.Design.NoActionBar</item>
<item name="chipStyle">@style/Widget.Material3.Chip.Assist.Elevated</item>
<item name="chipStyle">@style/Widget.Material.Chip.Choice.Dark</item>
<!-- fonts -->
<item name="android:fontFamily">@font/inter</item>
<item name="font">@font/inter</item>
@ -137,8 +135,6 @@
<item name="windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="cornerRadius">@dimen/card_corner_radius</item>
<item name="alertDialogTheme">@style/Theme.MagiskModuleManager.AlertDialog</item>
</style>
<style name="Widget.Material.Chip.Choice.Dark" parent="Widget.MaterialComponents.Chip.Action">
@ -165,8 +161,6 @@
<!-- fonts -->
<item name="android:fontFamily">@font/inter</item>
<item name="font">@font/inter</item>
<item name="cornerRadius">@dimen/card_corner_radius</item>
<item name="alertDialogTheme">@style/Theme.MagiskModuleManager.AlertDialog</item>
</style>
<style name="Theme.MagiskModuleManager" parent="Theme.MagiskModuleManager.Light" />
@ -181,13 +175,4 @@
<style name="Theme.MagiskModuleManager.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="Theme.MagiskModuleManager.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
<style name="Theme.MagiskModuleManager.AlertDialog" parent="ThemeOverlay.Material3.MaterialAlertDialog">
<item name="dialogCornerRadius">28dp</item>
<item name="cornerFamily">rounded</item>
<item name="android:colorBackground">?attr/colorSurface</item>
<item name="android:layout" tools:ignore="PrivateResource">@layout/m3_alert_dialog</item>
</style>
</resources>

@ -1,9 +1,16 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory app:title="@string/warning_pls_restart" app:icon="@drawable/ic_baseline_info_24"/>
<PreferenceCategory>
<Preference
app:icon="@drawable/ic_baseline_info_24"
app:key="pref_warning_restart"
app:enabled="false"
app:singleLineTitle="false"
app:title="@string/warning_pls_restart" />
</PreferenceCategory>
<!-- Custom repos has been announced, check https://github.com/Androidacy/MagiskModuleManager/issues/131 -->
<!-- Custom repos has been announced, check https://github.com/Fox2Code/FoxMagiskModuleManager/issues/131 -->
<PreferenceCategory app:title="@string/pref_category_repos">
<Preference
app:icon="@drawable/ic_baseline_extension_24"

@ -11,16 +11,17 @@ buildscript {
extra.apply {
set("sentryConfigFile", rootProject.file("sentry.properties"))
set("hasSentryConfig", false)
set("sentryVersion", "6.18.1")
set("sentryVersion", "6.17.0")
}
dependencies {
classpath("com.android.tools.build:gradle:8.0.0")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.20")
classpath("com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:10.6.2")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath("io.realm:realm-gradle-plugin:10.15.1")
//noinspection GradleDependency
classpath("io.realm:realm-gradle-plugin:10.14.0-transformer-api")
classpath("io.sentry:sentry-android-gradle-plugin:3.5.0")
}
}
@ -31,8 +32,8 @@ tasks.register("clean", Delete::class) {
afterEvaluate {
tasks.withType<JavaCompile>().configureEach {
sourceCompatibility = JavaVersion.VERSION_19.toString()
targetCompatibility = JavaVersion.VERSION_19.toString()
sourceCompatibility = JavaVersion.VERSION_17.toString()
targetCompatibility = JavaVersion.VERSION_17.toString()
}
}

@ -170,7 +170,7 @@ mmm_exec setLastLine "The installer support mmm_exec"
# Wait to simulate the module doing something
sleep 5
mmm_exec hideLoading
mmm_exec setSupportLink https://github.com/Androidacy/MagiskModuleManager
mmm_exec setSupportLink https://github.com/Fox2Code/FoxMagiskModuleManager
```
[You may look at the examples modules and their codes.](examples)

@ -6,6 +6,6 @@ author=Fox2Code
description=Fox's Magisk Module Manager example module
minApi=21
minMagisk=19000
support=https://github.com/Androidacy/MagiskModuleManager
support=https://github.com/Fox2Code/FoxMagiskModuleManager
donate=https://paypal.me/fox2code
config=com.fox2code.mmm

@ -6,6 +6,6 @@ author=Fox2Code
description=Fox's Magisk Module Manager rainbow module
minApi=21
minMagisk=19000
support=https://github.com/Androidacy/MagiskModuleManager
support=https://github.com/Fox2Code/FoxMagiskModuleManager
donate=https://paypal.me/fox2code
config=com.fox2code.mmm

@ -1,4 +0,0 @@
このアプリは Magisk またはその開発者によって公式にサポートされていないよ。
このアプリに表示されているモジュールは完全に連携していないよ。
代わりにリポジトリのオーナーに連絡してね。

@ -1 +0,0 @@
公式アプリがサポートを終了した Magisk モジュールマネージャーだよ。

@ -1 +1 @@
Um gerenciador de módulos do Magisk, pois o app oficial removeu esta função.
Um gerenciador de módulos para Magisk, pois o aplicativo oficial removeu esta função.

@ -1 +0,0 @@
En modulhanterare för Magisk eftersom den officiella appen inte längre har stöd för det.

@ -23,8 +23,6 @@ dependencyResolutionManagement {
}
}
enableFeaturePreview("STABLE_CONFIGURATION_CACHE")
// val isCiServer = System.getenv().containsKey("CI")
// Cache build artifacts, so expensive operations do not need to be re-computed
buildCache {

Loading…
Cancel
Save