Implement local file assets
Этот коммит содержится в:
@@ -16,26 +16,45 @@
|
||||
package org.traccar.manager;
|
||||
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.res.AssetManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.view.View;
|
||||
import android.webkit.MimeTypeMap;
|
||||
import android.webkit.WebResourceResponse;
|
||||
import android.webkit.WebSettings;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import android.webkit.WebViewFragment;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class MainFragment extends WebViewFragment {
|
||||
|
||||
private String version = "3.7";
|
||||
private Uri serverUri;
|
||||
private AssetManager assetManager;
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
assetManager = getActivity().getAssets();
|
||||
|
||||
if ((getActivity().getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||
WebView.setWebContentsDebuggingEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
getWebView().setWebViewClient(webViewClient);
|
||||
|
||||
WebSettings webSettings = getWebView().getSettings();
|
||||
webSettings.setJavaScriptEnabled(true);
|
||||
webSettings.setDomStorageEnabled(true);
|
||||
@@ -43,8 +62,79 @@ public class MainFragment extends WebViewFragment {
|
||||
|
||||
String url = PreferenceManager.getDefaultSharedPreferences(
|
||||
getActivity()).getString(MainActivity.PREFERENCE_URL, null);
|
||||
serverUri = Uri.parse(url);
|
||||
|
||||
getWebView().loadUrl(url);
|
||||
}
|
||||
|
||||
public String getMimeType(String url) {
|
||||
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
|
||||
if (extension != null) {
|
||||
switch (extension) {
|
||||
case "js":
|
||||
return "text/javascript";
|
||||
case "woff":
|
||||
return "application/font-woff";
|
||||
case "woff2":
|
||||
return "application/font-woff2";
|
||||
case "ttf":
|
||||
return "application/x-font-ttf";
|
||||
case "eot":
|
||||
return "application/vnd.ms-fontobject";
|
||||
case "svg":
|
||||
return "image/svg+xml";
|
||||
default:
|
||||
return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public WebResourceResponse loadFileFromAssets(String url, String file) throws IOException {
|
||||
String mimeType = getMimeType(url);
|
||||
String encoding = "UTF-8";
|
||||
InputStream inputStream = assetManager.open(file);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
int statusCode = HttpURLConnection.HTTP_OK;
|
||||
String reasonPhase = "OK";
|
||||
Map<String, String> responseHeaders = new HashMap<>();
|
||||
responseHeaders.put("Access-Control-Allow-Origin", "*");
|
||||
return new WebResourceResponse(mimeType, encoding, statusCode, reasonPhase, responseHeaders, inputStream);
|
||||
} else {
|
||||
return new WebResourceResponse(mimeType, encoding, inputStream);
|
||||
}
|
||||
}
|
||||
|
||||
private WebViewClient webViewClient = new WebViewClient() {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
|
||||
Uri uri = Uri.parse(url);
|
||||
if (uri.getHost().equals(serverUri.getHost())) {
|
||||
String path = uri.getPath();
|
||||
if (!path.startsWith("/api")) {
|
||||
if (path.equals("/")) {
|
||||
path = "/release.html";
|
||||
}
|
||||
try {
|
||||
return loadFileFromAssets(url, "app/" + version + path);
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
} else if (uri.getHost().equals("cdnjs.cloudflare.com")) {
|
||||
String path = uri.getPath().substring("/ajax/libs".length());
|
||||
try {
|
||||
return loadFileFromAssets(url, "cdnjs" + path);
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user