mirror of
https://git.quad4.io/RNS-Things/MeshChatX.git
synced 2026-06-04 10:31:21 +00:00
104 lines
3.2 KiB
Java
104 lines
3.2 KiB
Java
package com.meshchatx;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.os.Bundle;
|
|
import android.webkit.WebSettings;
|
|
import android.webkit.WebView;
|
|
import android.webkit.WebViewClient;
|
|
import android.widget.ProgressBar;
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
import com.chaquo.python.Python;
|
|
import com.chaquo.python.android.AndroidPlatform;
|
|
|
|
public class MainActivity extends AppCompatActivity {
|
|
private WebView webView;
|
|
private ProgressBar progressBar;
|
|
private static final String SERVER_URL = "https://127.0.0.1:8000";
|
|
private static final int SERVER_PORT = 8000;
|
|
|
|
@SuppressLint("SetJavaScriptEnabled")
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.activity_main);
|
|
|
|
webView = findViewById(R.id.webView);
|
|
progressBar = findViewById(R.id.progressBar);
|
|
|
|
if (!Python.isStarted()) {
|
|
Python.start(new AndroidPlatform(this));
|
|
}
|
|
|
|
WebSettings webSettings = webView.getSettings();
|
|
webSettings.setJavaScriptEnabled(true);
|
|
webSettings.setDomStorageEnabled(true);
|
|
webSettings.setDatabaseEnabled(true);
|
|
webSettings.setAllowFileAccess(true);
|
|
webSettings.setAllowContentAccess(true);
|
|
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
|
|
|
|
webView.setWebViewClient(new WebViewClient() {
|
|
@Override
|
|
public void onPageFinished(WebView view, String url) {
|
|
super.onPageFinished(view, url);
|
|
progressBar.setVisibility(android.view.View.GONE);
|
|
}
|
|
|
|
@Override
|
|
public void onPageStarted(WebView view, String url, android.graphics.Bitmap favicon) {
|
|
super.onPageStarted(view, url, favicon);
|
|
progressBar.setVisibility(android.view.View.VISIBLE);
|
|
}
|
|
|
|
@SuppressLint("WebViewClientOnReceivedSslError")
|
|
@Override
|
|
public void onReceivedSslError(WebView view, android.webkit.SslErrorHandler handler, android.net.http.SslError error) {
|
|
// Ignore SSL certificate errors for localhost
|
|
handler.proceed();
|
|
}
|
|
});
|
|
|
|
startMeshChatServer();
|
|
|
|
new Thread(() -> {
|
|
try {
|
|
Thread.sleep(2000);
|
|
} catch (InterruptedException e) {
|
|
e.printStackTrace();
|
|
}
|
|
runOnUiThread(() -> {
|
|
webView.loadUrl(SERVER_URL);
|
|
});
|
|
}).start();
|
|
}
|
|
|
|
private void startMeshChatServer() {
|
|
new Thread(() -> {
|
|
try {
|
|
Python py = Python.getInstance();
|
|
py.getModule("meshchat_wrapper").callAttr("start_server", SERVER_PORT);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
@Override
|
|
public void onBackPressed() {
|
|
if (webView.canGoBack()) {
|
|
webView.goBack();
|
|
} else {
|
|
super.onBackPressed();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onDestroy() {
|
|
super.onDestroy();
|
|
if (webView != null) {
|
|
webView.destroy();
|
|
}
|
|
}
|
|
}
|
|
|