-
-
Notifications
You must be signed in to change notification settings - Fork 855
Closed
Description
Hello sir,
I'm having an issue with the WebView filter. It's showing two different outputs: the emulator displays the correct output, but on the real device, the loaded page appears with insufficient height.
EMULATOR OUTPUT (LD PLAYER)
REAL DEVICE OUTPUT (OPPO F19, SUMSUNG TAB, SAMSUNG M02)
CODE
private void setBrowser() {
// Inflate custom layout that contains the WebView
View view = LayoutInflater.from(requireContext()).inflate(R.layout.browser_ui, null);
// Safety check in case view is reused
if (view.getParent() != null) {
((ViewGroup) view.getParent()).removeView(view);
}
WebView webView = view.findViewById(R.id.main);
webView.setBackgroundColor(Color.TRANSPARENT);
// Configure WebView settings
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
// WebView client setup
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d(WBT, "Page started loading: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d(WBT, "Page finished loading: " + url);
// Set transparent background
view.evaluateJavascript(
"javascript:(function() {" +
"document.documentElement.style.background = 'transparent';" +
"document.body.style.background = 'transparent';" +
"document.body.style.backgroundColor = 'transparent';" +
"})()", null);
// Inject custom meta viewport tag and size
float initialScale = 0.3f;
float width = 16;
float height = 9;
String javascript =
"javascript:(function() {" +
" var meta = document.querySelector('meta[name=viewport]');" +
" if (meta) {" +
" meta.setAttribute('content', 'width=" + width +
", height=" + height + ", initial-scale=" + initialScale +
", maximum-scale=3.0, user-scalable=no');" +
" } else {" +
" var newMeta = document.createElement('meta');" +
" newMeta.name = 'viewport';" +
" newMeta.content = 'width=" + width + ", height=" + height +
", initial-scale=" + initialScale + ", maximum-scale=3.0, user-scalable=no';" +
" document.getElementsByTagName('head')[0].appendChild(newMeta);" +
" }" +
" document.body.style.width = '" + width + "px';" +
" document.body.style.height = '" + height + "px';" +
"})()";
webView.evaluateJavascript(javascript, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.e(WBT, "onReceiveValue: " + value);
// Optional: Handle JS response
}
});
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
Log.e(WBT, "WebView error: " + errorCode + " - " + description + " - " + failingUrl);
}
});
// Enable console messages
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
Log.d(WBT, consoleMessage.message()
+ " -- From line " + consoleMessage.lineNumber()
+ " of " + consoleMessage.sourceId());
return true;
}
});
// Load the URL
webView.loadUrl("https://mycric.app/overlay/685d2548de1cbd57ee87907c/685d344ede1cbd57ee87c7bf");
// Get dimensions with fallback
Point previewSize = genericStream.getGlInterface().getEncoderSize();
int sizeSpecWidth = View.MeasureSpec.makeMeasureSpec(previewSize.x, View.MeasureSpec.EXACTLY);
int sizeSpecHeight = View.MeasureSpec.makeMeasureSpec(previewSize.y, View.MeasureSpec.EXACTLY);
view.measure(sizeSpecWidth, sizeSpecHeight);
view.layout(0, 0, previewSize.x, previewSize.y);
Log.i(WBT,"ssw "+sizeSpecWidth+" ssh "+sizeSpecHeight);
Log.i(WBT,"ssw "+previewSize.x+" ssh "+previewSize.y);
// Apply the filter
AndroidViewFilterRender androidViewFilterRender = new AndroidViewFilterRender();
androidViewFilterRender.setView(view);
androidViewFilterRender.setPosition(0,0);
genericStream.getGlInterface().setFilter(androidViewFilterRender);
}
Metadata
Metadata
Assignees
Labels
No labels