Update androidacy APIs

Signed-off-by: androidacy-user <opensource@androidaacy.com>
pull/192/head
androidacy-user 2 years ago
parent 23c153a6ed
commit 9c2d361a1c

@ -2,8 +2,7 @@
## Fox Module contest
[NoStorageRestrict](https://github.com/Magisk-Modules-Alt-Repo/NoStorageRestrict)
by [@DanGLES3](https://github.com/DanGLES3) won via vote in community telegram server.
[NoStorageRestrict](https://github.com/Magisk-Modules-Alt-Repo/NoStorageRestrict) by [@DanGLES3](https://github.com/DanGLES3) won via vote in community telegram server.
Module description: Removes the restriction when selecting folders (Downloads/Android) through the file manager on Android 11 and higher
@ -19,12 +18,11 @@ Main activity:
## What is this?
The official Magisk is dropping support to download online modules...
So I made my own app to do that! :3
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**
**The modules shown in this app are not affiliated with this app or Magisk**
(Please contact repo owners instead)
## Requirements

@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
id 'com.mikepenz.aboutlibraries.plugin'
id "io.sentry.android.gradle" version "3.1.4"
}
android {
@ -10,8 +11,8 @@ android {
applicationId "com.fox2code.mmm"
minSdk 21
targetSdk 33
versionCode 53
versionName "0.6.1"
versionCode 54
versionName "0.7.0-dev"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@ -35,9 +36,9 @@ android {
dimension "type"
buildConfigField "boolean", "ENABLE_AUTO_UPDATER", "true"
buildConfigField(
"java.util.List<String>",
"ENABLED_REPOS",
"java.util.Arrays.asList(\"magisk_alt_repo\", \"dg_magisk_repo\", \"androidacy_repo\")",
"java.util.List<String>",
"ENABLED_REPOS",
"java.util.Arrays.asList(\"magisk_alt_repo\", \"dg_magisk_repo\", \"androidacy_repo\")",
)
}
@ -53,9 +54,9 @@ android {
// Repo with ads or tracking feature are disabled by default for the
// F-Droid flavor.
buildConfigField(
"java.util.List<String>",
"ENABLED_REPOS",
"java.util.Arrays.asList(\"magisk_alt_repo\")",
"java.util.List<String>",
"ENABLED_REPOS",
"java.util.Arrays.asList(\"magisk_alt_repo\")",
)
}
}
@ -75,7 +76,7 @@ aboutLibraries {
}
configurations {
implementation.exclude group: 'org.jetbrains' , module: 'annotations'
implementation.exclude group: 'org.jetbrains', module: 'annotations'
}
dependencies {
@ -89,7 +90,7 @@ dependencies {
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'androidx.webkit:webkit:1.4.0'
implementation 'com.google.android.material:material:1.6.1'
implementation "com.mikepenz:aboutlibraries:${latestAboutLibsRelease}"
implementation 'com.mikepenz:aboutlibraries:10.4.1-a01'
implementation "dev.rikka.rikkax.layoutinflater:layoutinflater:1.2.0"
implementation "dev.rikka.rikkax.insets:insets:1.3.0"
implementation 'com.github.Dimezis:BlurView:version-1.6.6'
@ -113,7 +114,7 @@ dependencies {
implementation "com.caverock:androidsvg:1.4"
// Test
testImplementation 'junit:junit:4.+'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

@ -5,7 +5,9 @@
tools:ignore="QueryAllPackagesPermission">
<!-- Wifi is not the only way to get an internet connection -->
<uses-feature android:name="android.hardware.wifi" android:required="false" />
<uses-feature
android:name="android.hardware.wifi"
android:required="false" />
<!-- Retrieve online modules -->
<uses-permission android:name="android.permission.INTERNET" />
@ -16,36 +18,39 @@
<!-- Open config apps for applications -->
<uses-permission-sdk-23 android:name="android.permission.QUERY_ALL_PACKAGES" />
<!-- Supposed to fix bugs with old firmware, only requested on pre Marshmallow -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="22" />
<application
android:name=".MainApplication"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/full_backup_content"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="@bool/lang_support_rtl"
android:testOnly="false"
android:theme="@style/Theme.MagiskModuleManager"
android:fullBackupContent="@xml/full_backup_content"
android:dataExtractionRules="@xml/data_extraction_rules"
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="false"
tools:targetApi="s"
tools:ignore="ManifestResource"
tools:replace="android:supportsRtl"
tools:ignore="ManifestResource">
<receiver android:name="com.fox2code.mmm.background.BackgroundBootListener"
tools:targetApi="s">
<receiver
android:name="com.fox2code.mmm.background.BackgroundBootListener"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<activity
android:name=".settings.SettingsActivity"
android:parentActivityName=".MainActivity"
android:exported="true"
android:label="@string/title_activity_settings">
android:label="@string/title_activity_settings"
android:parentActivityName=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.APPLICATION_PREFERENCES" />
</intent-filter>
@ -53,8 +58,8 @@
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:label="@string/app_name_short">
android:label="@string/app_name_short"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@ -62,10 +67,10 @@
</activity>
<activity
android:name=".installer.InstallerActivity"
android:parentActivityName=".MainActivity"
android:exported="false"
android:screenOrientation="portrait"
android:launchMode="singleTop"
android:parentActivityName=".MainActivity"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity">
<intent-filter>
<action android:name="${applicationId}.intent.action.INSTALL_MODULE_INTERNAL" />
@ -73,30 +78,45 @@
</activity>
<activity
android:name=".markdown.MarkdownActivity"
android:parentActivityName=".MainActivity"
android:exported="false"
android:theme="@style/Theme.MagiskModuleManager">
</activity>
android:parentActivityName=".MainActivity"
android:theme="@style/Theme.MagiskModuleManager"></activity>
<activity
android:name=".androidacy.AndroidacyActivity"
android:parentActivityName=".MainActivity"
android:exported="false"
android:parentActivityName=".MainActivity"
android:theme="@style/Theme.MagiskModuleManager">
<intent-filter>
<action android:name="${applicationId}.intent.action.OPEN_ANDROIDACY_INTERNAL" />
</intent-filter>
</activity>
<activity android:name="com.mikepenz.aboutlibraries.ui.LibsActivity"
tools:node="remove"/>
<activity
android:name="com.mikepenz.aboutlibraries.ui.LibsActivity"
tools:node="remove" />
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer"
<meta-data
android:name="androidx.emoji2.text.EmojiCompatInitializer"
tools:node="remove" />
<meta-data android:name="androidx.work.WorkManagerInitializer"
<meta-data
android:name="androidx.work.WorkManagerInitializer"
tools:node="remove" />
</provider>
<meta-data
android:name="io.sentry.dsn"
android:value="https://ba5cb5ef513b423cbd54a2a8457113b1@sentry.androidacy.com/7" />
<!-- Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
We recommend adjusting this value in production. -->
<meta-data
android:name="io.sentry.traces.sample-rate"
android:value="1.0" />
<!-- Enable user interaction tracing to capture transactions for various UI events (such as clicks or scrolls). -->
<meta-data
android:name="io.sentry.traces.user-interaction.enable"
android:value="true" />
</application>
</manifest>

@ -37,6 +37,7 @@ import com.google.android.material.progressindicator.LinearProgressIndicator;
import eightbitlab.com.blurview.BlurView;
import eightbitlab.com.blurview.RenderScriptBlur;
import io.sentry.android.core.SentryAndroid;
public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRefreshListener,
SearchView.OnQueryTextListener, SearchView.OnCloseListener,
@ -73,6 +74,19 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
@Override
protected void onCreate(Bundle savedInstanceState) {
SentryAndroid.init(this, options -> {
// Add a callback that will be used before the event is sent to Sentry.
// With this callback, you can modify the event or, when returning null, also discard the event.
options.setBeforeSend((event, hint) -> {
// Check saved preferences to see if the user has opted out of crash reporting.
// If the user has opted out, return null.
if (SettingsActivity.getCrashReporting(this)) {
return event;
} else {
return null;
}
});
});
this.initMode = true;
BackgroundUpdateChecker.onMainActivityCreate(this);
super.onCreate(savedInstanceState);

@ -21,24 +21,23 @@ import org.json.JSONObject;
import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import okhttp3.Cookie;
import okhttp3.HttpUrl;
@SuppressWarnings("KotlinInternalInJava")
public final class AndroidacyRepoData extends RepoData {
private static final String TAG = "AndroidacyRepoData";
private static final HttpUrl OK_HTTP_URL;
static {
HttpUrl.Builder OK_HTTP_URL_BUILDER =
new HttpUrl.Builder().scheme("https");
// Using HttpUrl.Builder.host(String) crash the app
OK_HTTP_URL_BUILDER.setHost$okhttp(".androidacy.com");
OK_HTTP_URL = OK_HTTP_URL_BUILDER.build();
OK_HTTP_URL_BUILDER.build();
}
// Avoid spamming requests to Androidacy
private long androidacyBlockade = 0;
private String token = null;
@ -60,26 +59,10 @@ public final class AndroidacyRepoData extends RepoData {
this.defaultSupport = "https://t.me/androidacy_discussions";
this.defaultDonate = "https://www.androidacy.com/membership-join/?utm_source=foxmmm&utm-medium=app&utm_campaign=fox-inapp";
this.defaultSubmitModule = "https://www.androidacy.com/module-repository-applications/";
this.host = testMode ? "staging-api.androidacy.com" : "api.androidacy.com";
this.host = testMode ? "staging-api.androidacy.com" : "production-api.androidacy.com";
this.testMode = testMode;
}
private static String getCookies() {
if (Http.hasWebView()) {
return CookieManager.getInstance().getCookie("https://.androidacy.com/");
} else {
Iterator<Cookie> cookies = Http.getCookieJar()
.loadForRequest(OK_HTTP_URL).iterator();
if (!cookies.hasNext()) return "";
StringBuilder stringBuilder = new StringBuilder();
while (true) {
stringBuilder.append(cookies.next().toString());
if (!cookies.hasNext()) return stringBuilder.toString();
stringBuilder.append(",");
}
}
}
public static AndroidacyRepoData getInstance() {
return RepoManager.getINSTANCE().getAndroidacyRepoData();
}
@ -91,14 +74,8 @@ public final class AndroidacyRepoData extends RepoData {
long time = System.currentTimeMillis();
if (this.androidacyBlockade > time) return false;
this.androidacyBlockade = time + 30_000L;
String cookies = AndroidacyRepoData.getCookies();
int start = cookies == null ? -1 : cookies.indexOf("USER=") + 5;
String token = null;
if (start != -1) {
int end = cookies.indexOf(";", start);
if (end != -1)
token = cookies.substring(start, end);
}
// Get token from androidacy_token shared preference
String token = this.cachedPreferences.getString("androidacy_token", null);
if (token != null) {
try {
Http.doHttpGet("https://" + this.host + "/auth/me?token=" + token, true);
@ -110,14 +87,10 @@ public final class AndroidacyRepoData extends RepoData {
return false;
}
Log.w(TAG, "Invalid token, resetting...");
if (Http.hasWebView()) {
CookieManager.getInstance().setCookie("https://.androidacy.com/",
"USER=; expires=Thu, 01 Jan 1970 00:00:00 GMT;" +
" path=/; secure; domain=.androidacy.com");
} else {
Http.getCookieJar().saveFromResponse(
OK_HTTP_URL, Collections.emptyList());
}
// Remove saved preference
SharedPreferences.Editor editor = this.cachedPreferences.edit();
editor.remove("androidacy_token");
editor.apply();
this.token = token = null;
}
}
@ -126,22 +99,16 @@ public final class AndroidacyRepoData extends RepoData {
Log.i(TAG, "Refreshing token...");
token = new String(Http.doHttpPost(
"https://" + this.host + "/auth/register",
"",true), StandardCharsets.UTF_8);
if (Http.hasWebView()) {
CookieManager.getInstance().setCookie("https://.androidacy.com/",
"USER=" + token + "; expires=Fri, 31 Dec 9999 23:59:59 GMT;" +
" path=/; secure; domain=.androidacy.com");
} else {
Http.getCookieJar().saveFromResponse(OK_HTTP_URL,
Collections.singletonList(Cookie.parse(OK_HTTP_URL,
"USER=" + token + "; expires=Fri, 31 Dec 9999 23:59:59 GMT;" +
" path=/; secure; domain=.androidacy.com")));
}
"foxmmm=true", true), StandardCharsets.UTF_8);
// Save token to shared preference
SharedPreferences.Editor editor = this.cachedPreferences.edit();
editor.putString("androidacy_token", token);
editor.apply();
} catch (Exception e) {
if ("Received error code: 419".equals(e.getMessage()) ||
"Received error code: 429".equals(e.getMessage()) ||
"Received error code: 503".equals(e.getMessage())
) {
) {
Log.e(TAG, "We are being rate limited!", e);
this.androidacyBlockade = time + 3_600_000L;
}
@ -194,7 +161,7 @@ public final class AndroidacyRepoData extends RepoData {
jsonObject.optString("zipUrl", ""));
repoModule.notesUrl = filterURL(
jsonObject.optString("notesUrl", ""));
if (repoModule.zipUrl == null) {
if (repoModule.zipUrl == null) {
repoModule.zipUrl = // Fallback url in case the API doesn't have zipUrl
"https://" + this.host + "/magisk/info/" + moduleId;
}
@ -264,7 +231,8 @@ public final class AndroidacyRepoData extends RepoData {
}
@Override
public void storeMetadata(RepoModule repoModule, byte[] data) {}
public void storeMetadata(RepoModule repoModule, byte[] data) {
}
@Override
public boolean tryLoadMetadata(RepoModule repoModule) {

@ -17,6 +17,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentTransaction;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
@ -61,6 +62,11 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
private static final String TAG = "SettingsActivity";
private static int devModeStep = 0;
public static boolean getCrashReporting(MainActivity mainActivity) {
return mainActivity.getPreferences(Context.MODE_PRIVATE)
.getBoolean("crash_reporting", true);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
devModeStep = 0;
@ -124,6 +130,16 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
}, 1);
return true;
});
// Crash reporting
TwoStatePreference crashReportingPreference = findPreference("pref_crash_reporting");
crashReportingPreference.setChecked(getCrashReporting(
(MainActivity) requireActivity()));
crashReportingPreference.setOnPreferenceChangeListener((preference, newValue) -> {
devModeStep = 0;
getCrashReportingEditor(requireActivity()).putBoolean("crash_reporting",
(boolean) newValue).apply();
return true;
});
Preference enableBlur = findPreference("pref_enable_blur");
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
enableBlur.setSummary(R.string.require_android_6);
@ -277,6 +293,10 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
BuildConfig.VERSION_CODE + ")");
}
private SharedPreferences.Editor getCrashReportingEditor(FragmentActivity requireActivity) {
return requireActivity.getSharedPreferences("crash_reporting", Context.MODE_PRIVATE).edit();
}
private void openFragment(Fragment fragment, @StringRes int title) {
FoxActivity compatActivity = getFoxActivity(this);
compatActivity.setOnBackPressedCallback(this);
@ -384,9 +404,7 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
} catch (IOException|JSONException e) {
Log.e(TAG, "Failed to preload repo values", e);
}
UiThreadHandler.handler.post(() -> {
updateCustomRepoList(false);
});
UiThreadHandler.handler.post(() -> updateCustomRepoList(false));
}
}.start();
}

@ -92,4 +92,5 @@
<string name="enable_blur_pref">Povolit rozostření</string>
<string name="repo_enabled">Repozitář povolen</string>
<string name="repo_disabled">Repozitář zakázán</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -94,7 +94,6 @@
<string name="add_repo">Repo hinzufügen</string>
<string name="remove_repo">Repo entfernen</string>
<string name="custom_url">Eigene URL</string>
<string name="androidacy_repo_info">Das Androidacy-Repo enthält Anzeigen und Tracker.</string>
<string name="backup_module_list">Backup Modules</string>
<string name="restore_module_list">Module wiederherstellen</string>
<string name="require_internet">Dieser Vorgang erfordert eine Internetverbindung</string>
@ -103,4 +102,5 @@
<string name="description">Beschreibung</string>
<string name="uninstall">Deinstallieren</string>
<string name="config">Konfig</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -124,7 +124,6 @@
<string name="add_repo">Προσθήκη αποθετηρίου</string>
<string name="remove_repo">Αφαίρεση αποθετηρίου</string>
<string name="custom_url">Προσαρμοσμένη διεύθυνση url</string>
<string name="androidacy_repo_info">Το αποθετήριο Androidacy έχει διαφημίσεις και ιχνηλάτες.</string>
<string name="backup_module_list">Εφεδρικά modules</string>
<string name="restore_module_list">Επαναφορά module</string>
<string name="require_internet">Αυτή η λειτουργία απαιτεί σύνδεση στο Διαδίκτυο</string>
@ -144,4 +143,5 @@
<string name="language_support_outdated">Ορισμένες μεταφράσεις για την τρέχουσα γλώσσα δεν είναι ενημερωμένες, παρακαλούμε να συνεισφέρετε στις μεταφράσεις εφαρμογών στο GitHub</string>
<!-- Replace with your own username when translating -->
<string name="language_translated_by">Μεταφράστηκε απο Tha_14</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -124,8 +124,8 @@
<string name="add_repo">Añadir Repositorio</string>
<string name="remove_repo">Eliminar Repositorio</string>
<string name="custom_url">URL Personalizado</string>
<string name="androidacy_repo_info">El repositorio Androidacy tiene anuncios y trackers.</string>
<string name="backup_module_list">Hacer copia de seguridad de los módulos</string>
<string name="restore_module_list">Restaurar módulos</string>
<string name="require_internet">Esta operación requiere una conexión a Internet.</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -87,4 +87,5 @@
</string>
<string name="repo_enabled">Hoidla lubatud</string>
<string name="repo_disabled">Hoidla keelatud</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -124,8 +124,8 @@
<string name="add_repo">Ajouter dépôt</string>
<string name="remove_repo">Supprimer dépôt</string>
<string name="custom_url">URL personnalisée</string>
<string name="androidacy_repo_info">Le dépôt Androidacy utilise des publicités et des pisteurs.</string>
<string name="backup_module_list">Sauvegarder les modules</string>
<string name="restore_module_list">Restaurer les modules</string>
<string name="require_internet">Cette opération requière une connexion internet</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -93,4 +93,5 @@
<string name="enable_blur_pref">Aktifkan blur</string>
<string name="repo_enabled">Repo diaktifkan</string>
<string name="repo_disabled">Repo dinonaktifkan</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -127,7 +127,6 @@
<string name="add_repo">Aggiungi Repository</string>
<string name="remove_repo">Rimuovi Repository</string>
<string name="custom_url">Url personalizzato</string>
<string name="androidacy_repo_info">La repository di Androidacy contiene pubblicità e tracker.</string>
<string name="backup_module_list">Salva moduli</string>
<string name="restore_module_list">Ripristina moduli</string>
<string name="require_internet">Questa operazione richiede una connessione ad internet</string>
@ -149,4 +148,5 @@
<!-- Sostituisci con il tuo nome utente durante la traduzione -->
<string name="language_translated_by">Traduzione di tugaia56</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -40,4 +40,5 @@
<string name="source_code">ソースコード</string>
<string name="dev_mode_enabled">開発者モードが有効です</string>
<string name="force_english_pref">Force English language</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -94,5 +94,5 @@
<string name="enable_blur_pref">Tilsløring</string>
<string name="repo_enabled">Pakkebrønn på</string>
<string name="repo_disabled">Pakkebrønn av</string>
<string name="androidacy_repo_info">Androidacy-pakkebrønnen har reklame og sporere.</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -124,7 +124,6 @@
<string name="add_repo">Dodaj repozytorium</string>
<string name="remove_repo">Usuń repozytorium</string>
<string name="custom_url">Niestandardowy URL</string>
<string name="androidacy_repo_info">Repo Androidacy korzysta z reklam i trackerów.</string>
<string name="backup_module_list">Kopia zapasowa modułów</string>
<string name="restore_module_list">Przywracanie modułów</string>
<string name="require_internet">Ta operacja wymaga połączenia internetowego</string>
@ -147,4 +146,5 @@
prosimy o rozważenie uzupełnienia tłumaczeń aplikacji na GitHubie.</string>
<!-- Replace with your own username when translating -->
<string name="language_translated_by">Tłumaczenie: Daviteusz</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -127,7 +127,6 @@
<string name="add_repo">Adicionar Repositório</string>
<string name="remove_repo">Remover Repositórios</string>
<string name="custom_url">URL Customizado</string>
<string name="androidacy_repo_info">O Repositórios Androidacy possui anuncios e rastreadores.</string>
<string name="backup_module_list">Fazer backup dos modulos</string>
<string name="restore_module_list">Restaurar modulos</string>
<string name="require_internet">Essa operação requer uma conexão com a internet</string>
@ -149,4 +148,5 @@
<string name="language_support_outdated">Algumas traduções para sua lingua atual não esta em dia, por favor considere contribuir para as traduções do app no Github</string>
<!-- Replace with your own username when translating -->
<string name="language_translated_by">Traduzido por mi007d e DanGLES3</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -119,7 +119,6 @@
<string name="add_repo">Adăugare depozit</string>
<string name="remove_repo">Eliminare depozit</string>
<string name="custom_url">URL personalizat</string>
<string name="androidacy_repo_info">Depozitul Androidacy utilizează reclame și instrumente de urmărire.</string>
<string name="backup_module_list">Rezervare module</string>
<string name="restore_module_list">Restabilire module</string>
<string name="require_internet">Această operațiune necesită o conexiune la Internet</string>
@ -138,4 +137,5 @@
nu sunt actualizate, vă rugăm să luați în considerare contribuția la traducerea aplicației pe GitHub</string>
<!-- Replace with your own username when translating -->
<string name="language_translated_by">Tradus de Fox2Code</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -120,8 +120,8 @@
<string name="add_repo">Добавить репо</string>
<string name="remove_repo">Убрать репо</string>
<string name="custom_url">Свой URL</string>
<string name="androidacy_repo_info">Репо Androidacy содержит рекламу и трекеры.</string>
<string name="backup_module_list">Резервное копирование модулей</string>
<string name="restore_module_list">Восстановить модули</string>
<string name="require_internet">Для этого действия потребуется подключение к Интернету</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -92,4 +92,5 @@
<string name="enable_blur_pref">Povoliť rozostrenia</string>
<string name="repo_enabled">Repozitár povolený</string>
<string name="repo_disabled">Repozitár zakázaný</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -127,7 +127,6 @@
<string name="add_repo">Repo ekle</string>
<string name="remove_repo">Repo\'yu kaldır</string>
<string name="custom_url">Özel url</string>
<string name="androidacy_repo_info">Androidacy repo\'da reklamlar ve takipçiler vardır.</string>
<string name="backup_module_list">Modülleri yedekle</string>
<string name="restore_module_list">Modülleri geri yükle</string>
<string name="require_internet">Bu işlem bir internet bağlantısı gerektirir</string>
@ -147,4 +146,5 @@
<string name="language_support_outdated">Şimdiki 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">Alprnn357 tarafından çevrildi</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -119,8 +119,8 @@
<string name="add_repo">Thêm kho</string>
<string name="remove_repo">Gỡ kho</string>
<string name="custom_url">Url tuỳ chỉnh</string>
<string name="androidacy_repo_info">Kho Androidacy có các quảng cáo và trình theo dõi.</string>
<string name="backup_module_list">Sao lưu mô-đun</string>
<string name="restore_module_list">Khôi phục mô-đun</string>
<string name="require_internet">Quá trình này yêu cầu kết nối internet</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -129,7 +129,6 @@
<string name="add_repo">添加库</string>
<string name="remove_repo">移除库</string>
<string name="custom_url">自定义网址</string>
<string name="androidacy_repo_info">Androidacy repo具有广告和跟踪器.</string>
<string name="backup_module_list">备份模块</string>
<string name="restore_module_list">还原模块</string>
<string name="require_internet">此操作需要互联网连接</string>
@ -150,4 +149,5 @@
请考虑为 GitHub 上的应用程序翻译做出贡献</string>
<!-- Replace with your own username when translating -->
<string name="language_translated_by">由ender-zhao翻译</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -120,7 +120,6 @@
<string name="add_repo">新增倉庫</string>
<string name="remove_repo">移除倉庫</string>
<string name="custom_url">自定義網址</string>
<string name="androidacy_repo_info">Androidacy repo 內建廣告和跟蹤器.</string>
<string name="backup_module_list">備份模組</string>
<string name="restore_module_list">還原模組</string>
<string name="require_internet">需要網路連線</string>
@ -140,4 +139,5 @@
<string name="language_support_outdated">如果您使用的當前語言沒有及時更新,請考慮在 GitHub 上的為翻譯做出貢獻。</string>
<!-- Replace with your own username when translating -->
<string name="language_translated_by">由 OrStudio.tw(@crcky5322) 提供美妙的翻譯</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -129,7 +129,7 @@
<string name="add_repo">Add Repo</string>
<string name="remove_repo">Remove Repo</string>
<string name="custom_url">Custom url</string>
<string name="androidacy_repo_info">The Androidacy repo has ads and trackers.</string>
<string name="androidacy_repo_info">This repository may display some non-intrusive advertising to cover server and development costs.</string>
<string name="backup_module_list">Backup modules</string>
<string name="restore_module_list">Restore modules</string>
<string name="require_internet">This operation require an internet connection</string>
@ -152,4 +152,6 @@
not up-to-date, please consider contributing to the app translations on GitHub</string>
<!-- Replace with your own username when translating -->
<string name="language_translated_by">Translated by Fox2Code</string>
<string name="crash_reporting">Automatically report bugs and performance to the developers</string>
<string name="crash_reporting_desc">If you disable this, the developer will not get automatic bug reports, and this may make troubleshooting harder</string>
</resources>

@ -115,6 +115,15 @@
app:title="@string/prevent_reboot_pref"
app:summary="@string/prevent_reboot_desc"
app:singleLineTitle="false" />
<!-- Crash reporting -->
<SwitchPreferenceCompat
app:defaultValue="true"
app:key="pref_crash_reporting"
app:icon="@drawable/ic_baseline_bug_report_24"
app:title="@string/crash_reporting"
app:summary="@string/crash_reporting_desc"
app:singleLineTitle="false" />
</PreferenceCategory>
<PreferenceCategory

@ -5,10 +5,10 @@ buildscript {
mavenCentral()
gradlePluginPortal()
}
project.ext.latestAboutLibsRelease = "10.3.1"
project.ext.latestAboutLibsRelease = "10.4.1-a01"
dependencies {
classpath 'com.android.tools.build:gradle:7.2.2'
classpath "com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:${latestAboutLibsRelease}"
classpath "com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:10.4.1-a01"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

Loading…
Cancel
Save