Add Androidacy test mode.

pull/186/head
Fox2Code 2 years ago
parent da70e11777
commit 3bfa064562

@ -158,6 +158,11 @@ public class MainApplication extends FoxApplication
return getSharedPreferences().getBoolean("pref_background_update_check", true);
}
public static boolean isAndroidacyTestMode() {
return isDeveloper() &&
getSharedPreferences().getBoolean("pref_androidacy_test_mode", false);
}
public static boolean isFirstBoot() {
return firstBoot;
}

@ -76,7 +76,7 @@ public class AndroidacyActivity extends FoxActivity {
this.forceBackPressed();
return;
}
if (!url.endsWith(AndroidacyUtil.REFERRER)) {
if (!url.contains(AndroidacyUtil.REFERRER)) {
if (url.lastIndexOf('/') < url.lastIndexOf('?')) {
url = url + '&' + AndroidacyUtil.REFERRER;
} else {

@ -4,6 +4,8 @@ import android.content.SharedPreferences;
import android.util.Log;
import android.webkit.CookieManager;
import androidx.annotation.NonNull;
import com.fox2code.mmm.R;
import com.fox2code.mmm.manager.ModuleInfo;
import com.fox2code.mmm.repo.RepoData;
@ -40,11 +42,14 @@ public class AndroidacyRepoData extends RepoData {
// Avoid spamming requests to Androidacy
private long androidacyBlockade = 0;
private String token = null;
private final boolean testMode;
private final String host;
public AndroidacyRepoData(String url, File cacheRoot,
SharedPreferences cachedPreferences) {
super(url, cacheRoot, cachedPreferences);
if (this.metaDataCache.exists()) {
public AndroidacyRepoData(File cacheRoot, SharedPreferences cachedPreferences,
boolean testMode) {
super(testMode ? RepoManager.ANDROIDACY_TEST_MAGISK_REPO_ENDPOINT :
RepoManager.ANDROIDACY_MAGISK_REPO_ENDPOINT, cacheRoot, cachedPreferences);
if (this.metaDataCache.exists() && !testMode) {
this.androidacyBlockade = this.metaDataCache.lastModified() + 30_000L;
if (this.androidacyBlockade - 60_000L > System.currentTimeMillis()) {
this.androidacyBlockade = 0; // Don't allow time travel. Well why not???
@ -55,6 +60,8 @@ public class AndroidacyRepoData extends RepoData {
this.defaultSupport = "https://t.me/androidacy_discussions";
this.defaultDonate = "https://patreon.com/androidacy";
this.defaultSubmitModule = "https://www.androidacy.com/module-repository-applications/";
this.host = testMode ? "staging-api.androidacy.com" : "api.androidacy.com";
this.testMode = testMode;
}
private static String getCookies() {
@ -89,7 +96,7 @@ public class AndroidacyRepoData extends RepoData {
}
if (token != null) {
try {
Http.doHttpGet("https://api.androidacy.com/auth/me?token=" + token, true);
Http.doHttpGet("https://" + this.host + "/auth/me?token=" + token, true);
} catch (Exception e) {
if ("Received error code: 419".equals(e.getMessage()) ||
"Received error code: 429".equals(e.getMessage())) {
@ -113,7 +120,7 @@ public class AndroidacyRepoData extends RepoData {
try {
Log.i(TAG, "Refreshing token...");
token = new String(Http.doHttpPost(
"https://api.androidacy.com/auth/register",
"https://" + this.host + "/auth/register",
"",true), StandardCharsets.UTF_8);
if (Http.hasWebView()) {
CookieManager.getInstance().setCookie("https://.androidacy.com/",
@ -184,11 +191,11 @@ public class AndroidacyRepoData extends RepoData {
jsonObject.optString("notesUrl", ""));
if (repoModule.zipUrl == null) {
repoModule.zipUrl = // Fallback url in case the API doesn't have zipUrl
"https://api.androidacy.com/magisk/info/?module=" + moduleId;
"https://" + this.host + "/magisk/info/?module=" + moduleId;
}
if (repoModule.notesUrl == null) {
repoModule.notesUrl = // Fallback url in case the API doesn't have notesUrl
"https://api.androidacy.com/magisk/readme/?module=" + moduleId;
"https://" + this.host + "/magisk/readme/?module=" + moduleId;
}
repoModule.zipUrl = this.injectToken(repoModule.zipUrl);
repoModule.notesUrl = this.injectToken(repoModule.notesUrl);
@ -286,4 +293,10 @@ public class AndroidacyRepoData extends RepoData {
}
return url;
}
@NonNull
@Override
public String getName() {
return this.testMode ? super.getName() + " (Test Mode)" : super.getName();
}
}

@ -4,6 +4,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import com.fox2code.mmm.MainActivity;
import com.fox2code.mmm.MainApplication;
import com.fox2code.mmm.XHooks;
import com.fox2code.mmm.androidacy.AndroidacyRepoData;
@ -37,6 +38,8 @@ public final class RepoManager {
public static final String ANDROIDACY_MAGISK_REPO_ENDPOINT =
"https://api.androidacy.com/magisk/repo";
public static final String ANDROIDACY_TEST_MAGISK_REPO_ENDPOINT =
"https://staging-api.androidacy.com/magisk/repo";
public static final String ANDROIDACY_MAGISK_REPO_HOMEPAGE =
"https://www.androidacy.com/modules-repo";
@ -125,11 +128,18 @@ public final class RepoManager {
}
public RepoData addOrGet(String url, String fallBackName) {
if (MAGISK_ALT_REPO_JSDELIVR.equals(url))
url = MAGISK_ALT_REPO;
if (DG_MAGISK_REPO.equals(url))
url = DG_MAGISK_REPO_GITHUB;
RepoData repoData;
synchronized (this.repoUpdateLock) {
repoData = this.repoData.get(url);
if (repoData == null) {
if (ANDROIDACY_MAGISK_REPO_ENDPOINT.equals(url)) {
if (ANDROIDACY_TEST_MAGISK_REPO_ENDPOINT.equals(url) ||
ANDROIDACY_MAGISK_REPO_ENDPOINT.equals(url)) {
if (this.androidacyRepoData != null)
return this.androidacyRepoData;
return this.addAndroidacyRepoData();
} else {
return this.addRepoData(url, fallBackName);
@ -276,6 +286,7 @@ public final class RepoManager {
case MAGISK_ALT_REPO_JSDELIVR:
return "magisk_alt_repo";
case ANDROIDACY_MAGISK_REPO_ENDPOINT:
case ANDROIDACY_TEST_MAGISK_REPO_ENDPOINT:
return "androidacy_repo";
case DG_MAGISK_REPO:
case DG_MAGISK_REPO_GITHUB:
@ -291,6 +302,7 @@ public final class RepoManager {
case RepoManager.MAGISK_ALT_REPO:
case RepoManager.MAGISK_ALT_REPO_JSDELIVR:
case RepoManager.ANDROIDACY_MAGISK_REPO_ENDPOINT:
case RepoManager.ANDROIDACY_TEST_MAGISK_REPO_ENDPOINT:
case RepoManager.DG_MAGISK_REPO:
case RepoManager.DG_MAGISK_REPO_GITHUB:
return true;
@ -299,10 +311,6 @@ public final class RepoManager {
}
private RepoData addRepoData(String url, String fallBackName) {
if (MAGISK_ALT_REPO_JSDELIVR.equals(url))
url = MAGISK_ALT_REPO;
if (DG_MAGISK_REPO.equals(url))
url = DG_MAGISK_REPO_GITHUB;
String id = internalIdOfUrl(url);
File cacheRoot = new File(this.mainApplication.getCacheDir(), id);
SharedPreferences sharedPreferences = this.mainApplication
@ -335,9 +343,10 @@ public final class RepoManager {
File cacheRoot = new File(this.mainApplication.getCacheDir(), "androidacy_repo");
SharedPreferences sharedPreferences = this.mainApplication
.getSharedPreferences("mmm_androidacy_repo", Context.MODE_PRIVATE);
AndroidacyRepoData repoData = new AndroidacyRepoData(
ANDROIDACY_MAGISK_REPO_ENDPOINT, cacheRoot, sharedPreferences);
AndroidacyRepoData repoData = new AndroidacyRepoData(cacheRoot,
sharedPreferences, MainApplication.isAndroidacyTestMode());
this.repoData.put(ANDROIDACY_MAGISK_REPO_ENDPOINT, repoData);
this.repoData.put(ANDROIDACY_TEST_MAGISK_REPO_ENDPOINT, repoData);
return repoData;
}

@ -325,6 +325,10 @@ public class SettingsActivity extends FoxActivity implements LanguageActivity {
setRepoData(RepoManager.ANDROIDACY_MAGISK_REPO_ENDPOINT);
setRepoData(RepoManager.DG_MAGISK_REPO_GITHUB);
updateCustomRepoList(true);
if (!MainApplication.isDeveloper()) {
Objects.requireNonNull((Preference) findPreference(
"pref_androidacy_test_mode")).setVisible(false);
}
}
@SuppressLint("RestrictedApi")

@ -133,6 +133,8 @@
<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>
<string name="androidacy_test_mode_pref">Androidacy test mode</string>
<string name="androidacy_test_mode_desc">Use staging Androidacy Endpoint instead of release endpoint. (Require app process restart)</string>
<!-- Background Notification translation -->
<string name="notification_update_title">Found %i module updates</string>

@ -59,6 +59,13 @@
app:icon="@drawable/ic_baseline_upload_file_24"
app:title="@string/submit_modules"
app:singleLineTitle="false" />
<SwitchPreferenceCompat
app:defaultValue="false"
app:key="pref_androidacy_test_mode"
app:icon="@drawable/ic_baseline_bug_report_24"
app:title="@string/androidacy_test_mode_pref"
app:summary="@string/androidacy_test_mode_desc"
app:singleLineTitle="false" />
<Preference
app:key="pref_androidacy_ads_disclaimer"
app:icon="@drawable/ic_baseline_info_24"

Loading…
Cancel
Save