Improve Andoridacy app integration.

pull/27/head
Fox2Code 4 years ago
parent bc84ad235e
commit 39e015a56d

@ -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() {

@ -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";

@ -163,13 +163,17 @@ public final class ModuleHolder implements Comparable<ModuleHolder> {
}
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();

@ -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());
}

@ -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;
}

@ -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;
});
}

@ -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) {

Loading…
Cancel
Save