Update androidacy APIs

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

@ -2,8 +2,7 @@
## Fox Module contest ## Fox Module contest
[NoStorageRestrict](https://github.com/Magisk-Modules-Alt-Repo/NoStorageRestrict) [NoStorageRestrict](https://github.com/Magisk-Modules-Alt-Repo/NoStorageRestrict) by [@DanGLES3](https://github.com/DanGLES3) won via vote in community telegram server.
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 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? ## What is this?
The official Magisk is dropping support to download online modules... 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.
So I made my own app to do that! :3
**This app is not officially supported by Magisk or its developers** **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) (Please contact repo owners instead)
## Requirements ## Requirements

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

@ -5,7 +5,9 @@
tools:ignore="QueryAllPackagesPermission"> tools:ignore="QueryAllPackagesPermission">
<!-- Wifi is not the only way to get an internet connection --> <!-- 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 --> <!-- Retrieve online modules -->
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
@ -16,36 +18,39 @@
<!-- Open config apps for applications --> <!-- Open config apps for applications -->
<uses-permission-sdk-23 android:name="android.permission.QUERY_ALL_PACKAGES" /> <uses-permission-sdk-23 android:name="android.permission.QUERY_ALL_PACKAGES" />
<!-- Supposed to fix bugs with old firmware, only requested on pre Marshmallow --> <!-- 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" /> android:maxSdkVersion="22" />
<application <application
android:name=".MainApplication" android:name=".MainApplication"
android:allowBackup="true" android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/full_backup_content"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="@bool/lang_support_rtl" android:supportsRtl="@bool/lang_support_rtl"
android:testOnly="false" android:testOnly="false"
android:theme="@style/Theme.MagiskModuleManager" 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" android:usesCleartextTraffic="false"
tools:targetApi="s" tools:ignore="ManifestResource"
tools:replace="android:supportsRtl" tools:replace="android:supportsRtl"
tools:ignore="ManifestResource"> tools:targetApi="s">
<receiver android:name="com.fox2code.mmm.background.BackgroundBootListener" <receiver
android:name="com.fox2code.mmm.background.BackgroundBootListener"
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter> </intent-filter>
</receiver> </receiver>
<activity <activity
android:name=".settings.SettingsActivity" android:name=".settings.SettingsActivity"
android:parentActivityName=".MainActivity"
android:exported="true" android:exported="true"
android:label="@string/title_activity_settings"> android:label="@string/title_activity_settings"
android:parentActivityName=".MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.APPLICATION_PREFERENCES" /> <action android:name="android.intent.action.APPLICATION_PREFERENCES" />
</intent-filter> </intent-filter>
@ -53,8 +58,8 @@
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:launchMode="singleTask" android:label="@string/app_name_short"
android:label="@string/app_name_short"> android:launchMode="singleTask">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
@ -62,10 +67,10 @@
</activity> </activity>
<activity <activity
android:name=".installer.InstallerActivity" android:name=".installer.InstallerActivity"
android:parentActivityName=".MainActivity"
android:exported="false" android:exported="false"
android:screenOrientation="portrait"
android:launchMode="singleTop" android:launchMode="singleTop"
android:parentActivityName=".MainActivity"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"> tools:ignore="LockedOrientationActivity">
<intent-filter> <intent-filter>
<action android:name="${applicationId}.intent.action.INSTALL_MODULE_INTERNAL" /> <action android:name="${applicationId}.intent.action.INSTALL_MODULE_INTERNAL" />
@ -73,30 +78,45 @@
</activity> </activity>
<activity <activity
android:name=".markdown.MarkdownActivity" android:name=".markdown.MarkdownActivity"
android:parentActivityName=".MainActivity"
android:exported="false" android:exported="false"
android:theme="@style/Theme.MagiskModuleManager"> android:parentActivityName=".MainActivity"
</activity> android:theme="@style/Theme.MagiskModuleManager"></activity>
<activity <activity
android:name=".androidacy.AndroidacyActivity" android:name=".androidacy.AndroidacyActivity"
android:parentActivityName=".MainActivity"
android:exported="false" android:exported="false"
android:parentActivityName=".MainActivity"
android:theme="@style/Theme.MagiskModuleManager"> android:theme="@style/Theme.MagiskModuleManager">
<intent-filter> <intent-filter>
<action android:name="${applicationId}.intent.action.OPEN_ANDROIDACY_INTERNAL" /> <action android:name="${applicationId}.intent.action.OPEN_ANDROIDACY_INTERNAL" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name="com.mikepenz.aboutlibraries.ui.LibsActivity" <activity
tools:node="remove"/> android:name="com.mikepenz.aboutlibraries.ui.LibsActivity"
tools:node="remove" />
<provider <provider
android:name="androidx.startup.InitializationProvider" android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup" android:authorities="${applicationId}.androidx-startup"
android:exported="false" android:exported="false"
tools:node="merge"> tools:node="merge">
<meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer" <meta-data
android:name="androidx.emoji2.text.EmojiCompatInitializer"
tools:node="remove" /> tools:node="remove" />
<meta-data android:name="androidx.work.WorkManagerInitializer" <meta-data
android:name="androidx.work.WorkManagerInitializer"
tools:node="remove" /> tools:node="remove" />
</provider> </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> </application>
</manifest> </manifest>

@ -37,6 +37,7 @@ import com.google.android.material.progressindicator.LinearProgressIndicator;
import eightbitlab.com.blurview.BlurView; import eightbitlab.com.blurview.BlurView;
import eightbitlab.com.blurview.RenderScriptBlur; import eightbitlab.com.blurview.RenderScriptBlur;
import io.sentry.android.core.SentryAndroid;
public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRefreshListener, public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRefreshListener,
SearchView.OnQueryTextListener, SearchView.OnCloseListener, SearchView.OnQueryTextListener, SearchView.OnCloseListener,
@ -73,6 +74,19 @@ public class MainActivity extends FoxActivity implements SwipeRefreshLayout.OnRe
@Override @Override
protected void onCreate(Bundle savedInstanceState) { 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; this.initMode = true;
BackgroundUpdateChecker.onMainActivityCreate(this); BackgroundUpdateChecker.onMainActivityCreate(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);

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

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

@ -92,4 +92,5 @@
<string name="enable_blur_pref">Povolit rozostření</string> <string name="enable_blur_pref">Povolit rozostření</string>
<string name="repo_enabled">Repozitář povolen</string> <string name="repo_enabled">Repozitář povolen</string>
<string name="repo_disabled">Repozitář zakázán</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> </resources>

@ -94,7 +94,6 @@
<string name="add_repo">Repo hinzufügen</string> <string name="add_repo">Repo hinzufügen</string>
<string name="remove_repo">Repo entfernen</string> <string name="remove_repo">Repo entfernen</string>
<string name="custom_url">Eigene URL</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="backup_module_list">Backup Modules</string>
<string name="restore_module_list">Module wiederherstellen</string> <string name="restore_module_list">Module wiederherstellen</string>
<string name="require_internet">Dieser Vorgang erfordert eine Internetverbindung</string> <string name="require_internet">Dieser Vorgang erfordert eine Internetverbindung</string>
@ -103,4 +102,5 @@
<string name="description">Beschreibung</string> <string name="description">Beschreibung</string>
<string name="uninstall">Deinstallieren</string> <string name="uninstall">Deinstallieren</string>
<string name="config">Konfig</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> </resources>

@ -124,7 +124,6 @@
<string name="add_repo">Προσθήκη αποθετηρίου</string> <string name="add_repo">Προσθήκη αποθετηρίου</string>
<string name="remove_repo">Αφαίρεση αποθετηρίου</string> <string name="remove_repo">Αφαίρεση αποθετηρίου</string>
<string name="custom_url">Προσαρμοσμένη διεύθυνση url</string> <string name="custom_url">Προσαρμοσμένη διεύθυνση url</string>
<string name="androidacy_repo_info">Το αποθετήριο Androidacy έχει διαφημίσεις και ιχνηλάτες.</string>
<string name="backup_module_list">Εφεδρικά modules</string> <string name="backup_module_list">Εφεδρικά modules</string>
<string name="restore_module_list">Επαναφορά module</string> <string name="restore_module_list">Επαναφορά module</string>
<string name="require_internet">Αυτή η λειτουργία απαιτεί σύνδεση στο Διαδίκτυο</string> <string name="require_internet">Αυτή η λειτουργία απαιτεί σύνδεση στο Διαδίκτυο</string>
@ -144,4 +143,5 @@
<string name="language_support_outdated">Ορισμένες μεταφράσεις για την τρέχουσα γλώσσα δεν είναι ενημερωμένες, παρακαλούμε να συνεισφέρετε στις μεταφράσεις εφαρμογών στο GitHub</string> <string name="language_support_outdated">Ορισμένες μεταφράσεις για την τρέχουσα γλώσσα δεν είναι ενημερωμένες, παρακαλούμε να συνεισφέρετε στις μεταφράσεις εφαρμογών στο GitHub</string>
<!-- Replace with your own username when translating --> <!-- Replace with your own username when translating -->
<string name="language_translated_by">Μεταφράστηκε απο Tha_14</string> <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> </resources>

@ -124,8 +124,8 @@
<string name="add_repo">Añadir Repositorio</string> <string name="add_repo">Añadir Repositorio</string>
<string name="remove_repo">Eliminar Repositorio</string> <string name="remove_repo">Eliminar Repositorio</string>
<string name="custom_url">URL Personalizado</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="backup_module_list">Hacer copia de seguridad de los módulos</string>
<string name="restore_module_list">Restaurar 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="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> </resources>

@ -87,4 +87,5 @@
</string> </string>
<string name="repo_enabled">Hoidla lubatud</string> <string name="repo_enabled">Hoidla lubatud</string>
<string name="repo_disabled">Hoidla keelatud</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> </resources>

@ -124,8 +124,8 @@
<string name="add_repo">Ajouter dépôt</string> <string name="add_repo">Ajouter dépôt</string>
<string name="remove_repo">Supprimer dépôt</string> <string name="remove_repo">Supprimer dépôt</string>
<string name="custom_url">URL personnalisée</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="backup_module_list">Sauvegarder les modules</string>
<string name="restore_module_list">Restaurer 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="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> </resources>

@ -93,4 +93,5 @@
<string name="enable_blur_pref">Aktifkan blur</string> <string name="enable_blur_pref">Aktifkan blur</string>
<string name="repo_enabled">Repo diaktifkan</string> <string name="repo_enabled">Repo diaktifkan</string>
<string name="repo_disabled">Repo dinonaktifkan</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> </resources>

@ -127,7 +127,6 @@
<string name="add_repo">Aggiungi Repository</string> <string name="add_repo">Aggiungi Repository</string>
<string name="remove_repo">Rimuovi Repository</string> <string name="remove_repo">Rimuovi Repository</string>
<string name="custom_url">Url personalizzato</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="backup_module_list">Salva moduli</string>
<string name="restore_module_list">Ripristina moduli</string> <string name="restore_module_list">Ripristina moduli</string>
<string name="require_internet">Questa operazione richiede una connessione ad internet</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 --> <!-- Sostituisci con il tuo nome utente durante la traduzione -->
<string name="language_translated_by">Traduzione di tugaia56</string> <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> </resources>

@ -40,4 +40,5 @@
<string name="source_code">ソースコード</string> <string name="source_code">ソースコード</string>
<string name="dev_mode_enabled">開発者モードが有効です</string> <string name="dev_mode_enabled">開発者モードが有効です</string>
<string name="force_english_pref">Force English language</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> </resources>

@ -94,5 +94,5 @@
<string name="enable_blur_pref">Tilsløring</string> <string name="enable_blur_pref">Tilsløring</string>
<string name="repo_enabled">Pakkebrønn på</string> <string name="repo_enabled">Pakkebrønn på</string>
<string name="repo_disabled">Pakkebrønn av</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> </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="add_repo">Dodaj repozytorium</string>
<string name="remove_repo">Usuń repozytorium</string> <string name="remove_repo">Usuń repozytorium</string>
<string name="custom_url">Niestandardowy URL</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="backup_module_list">Kopia zapasowa modułów</string>
<string name="restore_module_list">Przywracanie modułów</string> <string name="restore_module_list">Przywracanie modułów</string>
<string name="require_internet">Ta operacja wymaga połączenia internetowego</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> prosimy o rozważenie uzupełnienia tłumaczeń aplikacji na GitHubie.</string>
<!-- Replace with your own username when translating --> <!-- Replace with your own username when translating -->
<string name="language_translated_by">Tłumaczenie: Daviteusz</string> <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> </resources>

@ -127,7 +127,6 @@
<string name="add_repo">Adicionar Repositório</string> <string name="add_repo">Adicionar Repositório</string>
<string name="remove_repo">Remover Repositórios</string> <string name="remove_repo">Remover Repositórios</string>
<string name="custom_url">URL Customizado</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="backup_module_list">Fazer backup dos modulos</string>
<string name="restore_module_list">Restaurar 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> <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> <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 --> <!-- Replace with your own username when translating -->
<string name="language_translated_by">Traduzido por mi007d e DanGLES3</string> <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> </resources>

@ -119,7 +119,6 @@
<string name="add_repo">Adăugare depozit</string> <string name="add_repo">Adăugare depozit</string>
<string name="remove_repo">Eliminare depozit</string> <string name="remove_repo">Eliminare depozit</string>
<string name="custom_url">URL personalizat</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="backup_module_list">Rezervare module</string>
<string name="restore_module_list">Restabilire module</string> <string name="restore_module_list">Restabilire module</string>
<string name="require_internet">Această operațiune necesită o conexiune la Internet</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> 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 --> <!-- Replace with your own username when translating -->
<string name="language_translated_by">Tradus de Fox2Code</string> <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> </resources>

@ -120,8 +120,8 @@
<string name="add_repo">Добавить репо</string> <string name="add_repo">Добавить репо</string>
<string name="remove_repo">Убрать репо</string> <string name="remove_repo">Убрать репо</string>
<string name="custom_url">Свой URL</string> <string name="custom_url">Свой URL</string>
<string name="androidacy_repo_info">Репо Androidacy содержит рекламу и трекеры.</string>
<string name="backup_module_list">Резервное копирование модулей</string> <string name="backup_module_list">Резервное копирование модулей</string>
<string name="restore_module_list">Восстановить модули</string> <string name="restore_module_list">Восстановить модули</string>
<string name="require_internet">Для этого действия потребуется подключение к Интернету</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> </resources>

@ -92,4 +92,5 @@
<string name="enable_blur_pref">Povoliť rozostrenia</string> <string name="enable_blur_pref">Povoliť rozostrenia</string>
<string name="repo_enabled">Repozitár povolený</string> <string name="repo_enabled">Repozitár povolený</string>
<string name="repo_disabled">Repozitár zakázaný</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> </resources>

@ -127,7 +127,6 @@
<string name="add_repo">Repo ekle</string> <string name="add_repo">Repo ekle</string>
<string name="remove_repo">Repo\'yu kaldır</string> <string name="remove_repo">Repo\'yu kaldır</string>
<string name="custom_url">Özel url</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="backup_module_list">Modülleri yedekle</string>
<string name="restore_module_list">Modülleri geri yükle</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> <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> <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 --> <!-- Replace with your own username when translating -->
<string name="language_translated_by">Alprnn357 tarafından çevrildi</string> <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> </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="add_repo">Thêm kho</string>
<string name="remove_repo">Gỡ kho</string> <string name="remove_repo">Gỡ kho</string>
<string name="custom_url">Url tuỳ chỉnh</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="backup_module_list">Sao lưu mô-đun</string>
<string name="restore_module_list">Khôi phục 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="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> </resources>

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

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

@ -129,7 +129,7 @@
<string name="add_repo">Add Repo</string> <string name="add_repo">Add Repo</string>
<string name="remove_repo">Remove Repo</string> <string name="remove_repo">Remove Repo</string>
<string name="custom_url">Custom url</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="backup_module_list">Backup modules</string>
<string name="restore_module_list">Restore modules</string> <string name="restore_module_list">Restore modules</string>
<string name="require_internet">This operation require an internet connection</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> not up-to-date, please consider contributing to the app translations on GitHub</string>
<!-- Replace with your own username when translating --> <!-- Replace with your own username when translating -->
<string name="language_translated_by">Translated by Fox2Code</string> <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> </resources>

@ -115,6 +115,15 @@
app:title="@string/prevent_reboot_pref" app:title="@string/prevent_reboot_pref"
app:summary="@string/prevent_reboot_desc" app:summary="@string/prevent_reboot_desc"
app:singleLineTitle="false" /> 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>
<PreferenceCategory <PreferenceCategory

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

Loading…
Cancel
Save