feat: support http w/ content src fix (#1298)

This commit is contained in:
エリス 2021-07-30 17:08:23 +09:00 committed by GitHub
parent 4e5892c5ed
commit 1636d70f25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -24,16 +24,19 @@ import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
import android.content.Context; import android.content.Context;
public class ConfigXmlParser { public class ConfigXmlParser {
private static String TAG = "ConfigXmlParser"; private static String TAG = "ConfigXmlParser";
private String launchUrl = null; private static String SCHEME_HTTP = "http";
private static String SCHEME_HTTPS = "https";
private static String DEFAULT_HOSTNAME = "localhost";
private String launchUrl;
private String contentSrc;
private CordovaPreferences prefs = new CordovaPreferences(); private CordovaPreferences prefs = new CordovaPreferences();
private ArrayList<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(20); private ArrayList<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(20);
@ -47,11 +50,7 @@ public class ConfigXmlParser {
public String getLaunchUrl() { public String getLaunchUrl() {
if (launchUrl == null) { if (launchUrl == null) {
launchUrl = "https://" + this.prefs.getString("hostname", "localhost"); setStartUrl(contentSrc);
}
if (this.prefs.getBoolean("AndroidInsecureFileModeEnabled", false)) {
launchUrl = "file:///android_asset/www/index.html";
} }
return launchUrl; return launchUrl;
@ -130,7 +129,10 @@ public class ConfigXmlParser {
else if (strNode.equals("content")) { else if (strNode.equals("content")) {
String src = xml.getAttributeValue(null, "src"); String src = xml.getAttributeValue(null, "src");
if (src != null) { if (src != null) {
setStartUrl(src); contentSrc = src;
} else {
// Default
contentSrc = "index.html";
} }
} }
} }
@ -147,20 +149,40 @@ public class ConfigXmlParser {
} }
} }
private String getLaunchUrlPrefix() {
if (prefs.getBoolean("AndroidInsecureFileModeEnabled", false)) {
return "file:///android_asset/www/";
} else {
String scheme = prefs.getString("scheme", SCHEME_HTTPS).toLowerCase();
String hostname = prefs.getString("hostname", DEFAULT_HOSTNAME);
if (!scheme.contentEquals(SCHEME_HTTP) && !scheme.contentEquals(SCHEME_HTTPS)) {
LOG.d(TAG, "The provided scheme \"" + scheme + "\" is not valid. " +
"Defaulting to \"" + SCHEME_HTTPS + "\". " +
"(Valid Options=" + SCHEME_HTTP + "," + SCHEME_HTTPS + ")");
scheme = SCHEME_HTTPS;
}
return scheme + "://" + hostname + '/';
}
}
private void setStartUrl(String src) { private void setStartUrl(String src) {
Pattern schemeRegex = Pattern.compile("^[a-z-]+://"); Pattern schemeRegex = Pattern.compile("^[a-z-]+://");
Matcher matcher = schemeRegex.matcher(src); Matcher matcher = schemeRegex.matcher(src);
if (matcher.find()) { if (matcher.find()) {
launchUrl = src; launchUrl = src;
} else { } else {
String launchUrlPrefix = getLaunchUrlPrefix();
// remove leading slash, "/", from content src if existing,
if (src.charAt(0) == '/') { if (src.charAt(0) == '/') {
src = src.substring(1); src = src.substring(1);
} }
if (this.prefs.getBoolean("AndroidInsecureFileModeEnabled", false)) {
launchUrl = "file:///android_asset/www/" + src; launchUrl = launchUrlPrefix + src;
} else {
launchUrl = "https://" + this.prefs.getString("hostname", "localhost") + "/" + src;
}
} }
} }
} }