From 39e015a56de47cbe62d1e9dd8bcf6ef4c4cbbbdb Mon Sep 17 00:00:00 2001 From: Fox2Code Date: Sun, 30 Jan 2022 16:54:26 +0100 Subject: [PATCH] Improve Andoridacy app integration. --- .../java/com/fox2code/mmm/ActionButtonType.java | 8 +++++++- .../main/java/com/fox2code/mmm/Constants.java | 1 + .../main/java/com/fox2code/mmm/ModuleHolder.java | 16 ++++++++++------ .../mmm/androidacy/AndroidacyActivity.java | 11 ++++++++++- .../mmm/androidacy/AndroidacyWebAPI.java | 10 ++++++---- .../fox2code/mmm/settings/SettingsActivity.java | 16 +++++++++++++--- .../com/fox2code/mmm/utils/IntentHelper.java | 3 ++- 7 files changed, 49 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/fox2code/mmm/ActionButtonType.java b/app/src/main/java/com/fox2code/mmm/ActionButtonType.java index 105367c..40cba9f 100644 --- a/app/src/main/java/com/fox2code/mmm/ActionButtonType.java +++ b/app/src/main/java/com/fox2code/mmm/ActionButtonType.java @@ -95,7 +95,13 @@ public enum ActionButtonType { CONFIG(R.drawable.ic_baseline_app_settings_alt_24) { @Override public void doAction(ImageButton button, ModuleHolder moduleHolder) { - IntentHelper.openConfig(button.getContext(), moduleHolder.getMainModuleConfig()); + String config = moduleHolder.getMainModuleConfig(); + if (config == null) return; + if (config.startsWith("https://www.androidacy.com/")) { + IntentHelper.openUrlAndroidacy(button.getContext(), config, false); + } else { + IntentHelper.openConfig(button.getContext(), config); + } } }, SUPPORT() { diff --git a/app/src/main/java/com/fox2code/mmm/Constants.java b/app/src/main/java/com/fox2code/mmm/Constants.java index 1b87bb4..515cc2a 100644 --- a/app/src/main/java/com/fox2code/mmm/Constants.java +++ b/app/src/main/java/com/fox2code/mmm/Constants.java @@ -17,6 +17,7 @@ public class Constants { public static final String EXTRA_INSTALL_NO_PATCH = "extra_install_no_patch"; public static final String EXTRA_INSTALL_NO_EXTENSIONS = "extra_install_no_extensions"; public static final String EXTRA_INSTALL_TEST_ROOTLESS = "extra_install_test_rootless"; + public static final String EXTRA_ANDROIDACY_ALLOW_INSTALL = "extra_androidacy_allow_install"; public static final String EXTRA_MARKDOWN_URL = "extra_markdown_url"; public static final String EXTRA_MARKDOWN_TITLE = "extra_markdown_title"; public static final String EXTRA_MARKDOWN_CONFIG = "extra_markdown_config"; diff --git a/app/src/main/java/com/fox2code/mmm/ModuleHolder.java b/app/src/main/java/com/fox2code/mmm/ModuleHolder.java index 0de0fa6..6c0896a 100644 --- a/app/src/main/java/com/fox2code/mmm/ModuleHolder.java +++ b/app/src/main/java/com/fox2code/mmm/ModuleHolder.java @@ -163,13 +163,17 @@ public final class ModuleHolder implements Comparable { } String config = this.getMainModuleConfig(); if (config != null) { - String pkg = IntentHelper.getPackageOfConfig(config); - try { - context.getPackageManager().getPackageInfo(pkg, 0); + if (config.startsWith("https://www.androidacy.com/")) { buttonTypeList.add(ActionButtonType.CONFIG); - } catch (PackageManager.NameNotFoundException e) { - Log.w(TAG, "Config package \"" + pkg + - "\" missing for module \"" + this.moduleId + "\""); + } else { + String pkg = IntentHelper.getPackageOfConfig(config); + try { + context.getPackageManager().getPackageInfo(pkg, 0); + buttonTypeList.add(ActionButtonType.CONFIG); + } catch (PackageManager.NameNotFoundException e) { + Log.w(TAG, "Config package \"" + pkg + + "\" missing for module \"" + this.moduleId + "\""); + } } } ModuleInfo moduleInfo = this.getMainModuleInfo(); diff --git a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyActivity.java b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyActivity.java index bb47537..e85aa08 100644 --- a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyActivity.java +++ b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyActivity.java @@ -3,6 +3,7 @@ package com.fox2code.mmm.androidacy; import android.annotation.SuppressLint; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.webkit.WebResourceRequest; import android.webkit.WebSettings; @@ -12,6 +13,7 @@ import android.webkit.WebViewClient; import androidx.annotation.Nullable; import com.fox2code.mmm.BuildConfig; +import com.fox2code.mmm.Constants; import com.fox2code.mmm.MainApplication; import com.fox2code.mmm.R; import com.fox2code.mmm.compat.CompatActivity; @@ -42,6 +44,8 @@ public class AndroidacyActivity extends CompatActivity { this.forceBackPressed(); return; } + boolean allowInstall = intent.getBooleanExtra( + Constants.EXTRA_ANDROIDACY_ALLOW_INSTALL, false); this.setContentView(R.layout.webview); this.hideActionBar(); this.webView = this.findViewById(R.id.webView); @@ -49,6 +53,10 @@ public class AndroidacyActivity extends CompatActivity { webSettings.setUserAgentString(Http.getAndroidacyUA()); webSettings.setDomStorageEnabled(true); webSettings.setJavaScriptEnabled(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Make website follow app theme + webSettings.setForceDark(MainApplication.getINSTANCE().isLightTheme() ? + WebSettings.FORCE_DARK_OFF : WebSettings.FORCE_DARK_ON); + } this.webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { @@ -61,7 +69,8 @@ public class AndroidacyActivity extends CompatActivity { return false; } }); - this.webView.addJavascriptInterface(new AndroidacyWebAPI(this), "mmm"); + this.webView.addJavascriptInterface( + new AndroidacyWebAPI(this, allowInstall), "mmm"); this.webView.loadUrl(uri.toString()); } diff --git a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyWebAPI.java b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyWebAPI.java index 797d355..1e3b7d5 100644 --- a/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyWebAPI.java +++ b/app/src/main/java/com/fox2code/mmm/androidacy/AndroidacyWebAPI.java @@ -15,9 +15,11 @@ import com.fox2code.mmm.utils.IntentHelper; public class AndroidacyWebAPI { private static final String TAG = "AndroidacyWebAPI"; private final AndroidacyActivity activity; + private final boolean allowInstall; - public AndroidacyWebAPI(AndroidacyActivity activity) { + public AndroidacyWebAPI(AndroidacyActivity activity, boolean allowInstall) { this.activity = activity; + this.allowInstall = allowInstall; } @JavascriptInterface @@ -61,7 +63,7 @@ public class AndroidacyWebAPI { */ @JavascriptInterface public boolean canInstall() { - return InstallerInitializer.peekMagiskPath() != null && + return this.allowInstall && this.hasRoot() && !MainApplication.isShowcaseMode(); } @@ -70,8 +72,8 @@ public class AndroidacyWebAPI { */ @JavascriptInterface public void install(String moduleUrl, String installTitle,String checksum) { - if (MainApplication.isShowcaseMode() || - InstallerInitializer.peekMagiskPath() == null) { + if (!this.allowInstall || !this.hasRoot() || + MainApplication.isShowcaseMode()) { // With lockdown mode enabled or lack of root, install should not have any effect return; } diff --git a/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java b/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java index 1c14188..dbc0da2 100644 --- a/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java +++ b/app/src/main/java/com/fox2code/mmm/settings/SettingsActivity.java @@ -124,7 +124,7 @@ public class SettingsActivity extends CompatActivity { debugPref.setVisible(true); debugPref.setOnPreferenceClickListener(preference -> { IntentHelper.openUrlAndroidacy(this.getContext(), - "https://www.androidacy.com/modules-repo"); + "https://www.androidacy.com/modules-repo", true); return true; }); } @@ -184,7 +184,12 @@ public class SettingsActivity extends CompatActivity { preference = findPreference(preferenceName + "_website"); if (preference != null && homepage != null) { preference.setOnPreferenceClickListener(p -> { - IntentHelper.openUrl(getCompatActivity(this), homepage); + if (homepage.startsWith("https://www.androidacy.com/")) { + IntentHelper.openUrlAndroidacy( + getCompatActivity(this), homepage, true); + } else { + IntentHelper.openUrl(getCompatActivity(this), homepage); + } return true; }); } @@ -198,7 +203,12 @@ public class SettingsActivity extends CompatActivity { preference = findPreference(preferenceName + "_submit"); if (preference != null && submissionUrl != null) { preference.setOnPreferenceClickListener(p -> { - IntentHelper.openUrl(getCompatActivity(this), submissionUrl); + if (submissionUrl.startsWith("https://www.androidacy.com/")) { + IntentHelper.openUrlAndroidacy( + getCompatActivity(this), submissionUrl, true); + } else { + IntentHelper.openUrl(getCompatActivity(this), submissionUrl); + } return true; }); } diff --git a/app/src/main/java/com/fox2code/mmm/utils/IntentHelper.java b/app/src/main/java/com/fox2code/mmm/utils/IntentHelper.java index 127c9b3..f7d7c8d 100644 --- a/app/src/main/java/com/fox2code/mmm/utils/IntentHelper.java +++ b/app/src/main/java/com/fox2code/mmm/utils/IntentHelper.java @@ -45,12 +45,13 @@ public class IntentHelper { } } - public static void openUrlAndroidacy(Context context, String url) { + public static void openUrlAndroidacy(Context context, String url,boolean allowInstall) { Uri uri = Uri.parse(url); try { Intent myIntent = new Intent( Constants.INTENT_ANDROIDACY_INTERNAL, uri, context, AndroidacyActivity.class); + myIntent.putExtra(Constants.EXTRA_ANDROIDACY_ALLOW_INSTALL, allowInstall); MainApplication.addSecret(myIntent); context.startActivity(myIntent); } catch (ActivityNotFoundException e) {