mirror of
https://github.com/apache/cordova-android.git
synced 2025-03-16 00:11:03 +08:00
feat: support http w/ content src fix (#1298)
This commit is contained in:
parent
4e5892c5ed
commit
1636d70f25
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user