Implement local file assets
Этот коммит содержится в:
@@ -5,3 +5,4 @@ local.properties
|
|||||||
app/app.iml
|
app/app.iml
|
||||||
build/
|
build/
|
||||||
app/build/
|
app/build/
|
||||||
|
app/src/main/assets
|
||||||
|
|||||||
@@ -16,26 +16,45 @@
|
|||||||
package org.traccar.manager;
|
package org.traccar.manager;
|
||||||
|
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.res.AssetManager;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.webkit.MimeTypeMap;
|
||||||
|
import android.webkit.WebResourceResponse;
|
||||||
import android.webkit.WebSettings;
|
import android.webkit.WebSettings;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
import android.webkit.WebViewClient;
|
||||||
import android.webkit.WebViewFragment;
|
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 {
|
public class MainFragment extends WebViewFragment {
|
||||||
|
|
||||||
|
private String version = "3.7";
|
||||||
|
private Uri serverUri;
|
||||||
|
private AssetManager assetManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
|
assetManager = getActivity().getAssets();
|
||||||
|
|
||||||
if ((getActivity().getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
|
if ((getActivity().getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||||
WebView.setWebContentsDebuggingEnabled(true);
|
WebView.setWebContentsDebuggingEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getWebView().setWebViewClient(webViewClient);
|
||||||
|
|
||||||
WebSettings webSettings = getWebView().getSettings();
|
WebSettings webSettings = getWebView().getSettings();
|
||||||
webSettings.setJavaScriptEnabled(true);
|
webSettings.setJavaScriptEnabled(true);
|
||||||
webSettings.setDomStorageEnabled(true);
|
webSettings.setDomStorageEnabled(true);
|
||||||
@@ -43,8 +62,79 @@ public class MainFragment extends WebViewFragment {
|
|||||||
|
|
||||||
String url = PreferenceManager.getDefaultSharedPreferences(
|
String url = PreferenceManager.getDefaultSharedPreferences(
|
||||||
getActivity()).getString(MainActivity.PREFERENCE_URL, null);
|
getActivity()).getString(MainActivity.PREFERENCE_URL, null);
|
||||||
|
serverUri = Uri.parse(url);
|
||||||
|
|
||||||
getWebView().loadUrl(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