MainActivity.java
package com.example.browser;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
import android.app.Activity;
public class MainActivity extends Activity {
private Button b1, backButton, forwardButton, sourceButton;
private EditText ed1;
private WebView wv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Powiązanie elementów z layoutu XML
b1 = findViewById(R.id.button);
ed1 = findViewById(R.id.editText);
backButton = findViewById(R.id.backButton);
forwardButton = findViewById(R.id.forwardButton);
sourceButton = findViewById(R.id.sourceButton);
wv1 = findViewById(R.id.webView);
// Konfiguracja ustawień WebView
WebSettings webSettings = wv1.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setLoadsImagesAutomatically(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setUseWideViewPort(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(false);
webSettings.setAllowFileAccess(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
// WebViewClient zarządzający historią i paskiem adresu
wv1.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
backButton.setEnabled(view.canGoBack());
forwardButton.setEnabled(view.canGoForward());
ed1.setText(url);
}
});
wv1.setWebChromeClient(new WebChromeClient());
// Domyślna strona startowa
wv1.loadUrl("https://www.google.pl");
// Obsługa przycisku "Idź"
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = ed1.getText().toString().trim();
if (!url.startsWith("http://") && !url.startsWith("https://")) {
url = "https://" + url;
}
wv1.loadUrl(url);
}
});
// Obsługa przycisku "Wstecz"
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wv1.canGoBack()) {
wv1.goBack();
}
}
});
// Obsługa przycisku "Dalej"
forwardButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wv1.canGoForward()) {
wv1.goForward();
}
}
});
// Obsługa pobierania i wyświetlania kodu źródłowego strony
sourceButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Skrypt JavaScript pobierający cały kod HTML strony
wv1.evaluateJavascript(
"(function() { return document.getElementsByTagName('html')[0].innerHTML; })();",
new ValueCallback<String>() {
@Override
public void onReceiveValue(String htmlSource) {
// Usunięcie znaków specjalnych ucieczki generowanych przez JS
if (htmlSource != null && htmlSource.length() > 2) {
htmlSource = htmlSource.substring(1, htmlSource.length() - 1)
.replace("\\u003C", "<")
.replace("\\n", "\n")
.replace("\\\"", "\"");
}
// Wyświetlenie kodu źródłowego w wyskakującym okienku (Dialog)
showSourceCodeDialog(htmlSource);
}
}
);
}
});
}
// Metoda tworząca okno dialogowe z kodem źródłowym
private void showSourceCodeDialog(String sourceCode) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Kod źródłowy strony");
ScrollView scrollView = new ScrollView(this);
TextView textView = new TextView(this);
textView.setText(sourceCode);
textView.setTextIsSelectable(true);
textView.setPadding(30, 30, 30, 30);
// --- ULEPSZENIE KONTRASTU (Edytor stylu ciemnego) ---
textView.setTextColor(android.graphics.Color.WHITE); // Biały tekst
textView.setBackgroundColor(android.graphics.Color.parseColor("#1E1E1E")); // Ciemnoszare/czarne tło
scrollView.setBackgroundColor(android.graphics.Color.parseColor("#1E1E1E")); // Tło przewijania
// ----------------------------------------------------
scrollView.addView(textView);
builder.setView(scrollView);
builder.setPositiveButton("Zamknij", null);
builder.show();
}
// Obsługa fizycznego przycisku powrotu w telefonie
@Override
public void onBackPressed() {
if (wv1.canGoBack()) {
wv1.goBack();
} else {
super.onBackPressed();
}
}
}
No comments:
Post a Comment