Загрузка данных
package com.velonet.browser;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.net.http.SslError;
import android.os.Bundle;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private EditText urlInput;
private WebView webView;
private LinearLayout speedDialLayout;
private TextView speedDialTitle;
private Button btnHome, btnOptions;
private Button sd1, sd2, sd3;
private String currentLanguage = "ru";
private String currentEngine = "Google";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
urlInput = findViewById(R.id.url_input);
webView = findViewById(R.id.web_view);
speedDialLayout = findViewById(R.id.speed_dial_layout);
speedDialTitle = findViewById(R.id.speed_dial_title);
Button goButton = findViewById(R.id.go_button);
Button btnBack = findViewById(R.id.btn_back);
Button btnForward = findViewById(R.id.btn_forward);
btnHome = findViewById(R.id.btn_home);
btnOptions = findViewById(R.id.btn_options);
sd1 = findViewById(R.id.sd_1);
sd2 = findViewById(R.id.sd_2);
sd3 = findViewById(R.id.sd_3);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onReceivedSslError(
WebView view,
SslErrorHandler handler,
SslError error
) {
handler.proceed();
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (!url.equals("about:blank")) {
webView.loadUrl(
"javascript:(function() { " +
"var css = 'html, body, div, span, p, a, li, input, textarea { " +
"background-color: #0C0F12 !important; " +
"color: #C9D1D9 !important; " +
"border-color: #21262D !important; } " +
"img, video { " +
"filter: invert(1) hue-rotate(180deg) !important; }';" +
"var head = document.head || " +
"document.getElementsByTagName('head');" +
"var style = document.createElement('style');" +
"style.type = 'text/css';" +
"if (style.styleSheet){ " +
"style.styleSheet.cssText = css; " +
"} else { " +
"style.appendChild(document.createTextNode(css)); " +
"}" +
"head.appendChild(style); " +
"})();"
);
}
}
});
goButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String input =
urlInput.getText().toString().trim();
if (!input.isEmpty()) {
openUrlLogic(input);
}
}
});
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (webView.getVisibility() == View.VISIBLE
&& webView.canGoBack()) {
webView.goBack();
}
}
});
btnForward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (webView.getVisibility() == View.VISIBLE
&& webView.canGoForward()) {
webView.goForward();
}
}
});
btnHome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
webView.stopLoading();
webView.setVisibility(View.GONE);
speedDialLayout.setVisibility(View.VISIBLE);
urlInput.setText("");
}
});
btnOptions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showSettingsDialog();
}
});
View.OnClickListener sdListener =
new View.OnClickListener() {
@Override
public void onClick(View v) {
Button b = (Button) v;
String tag = b.getText().toString();
if (tag.equals("+")) {
showAddSpeedDialDialog();
} else {
if (tag.equals("Google")) {
openUrlLogic("https://google.com");
} else if (tag.equals("Yandex")) {
openUrlLogic("https://ya.ru");
} else {
SharedPreferences prefs =
getSharedPreferences(
"RetroPrefs",
MODE_PRIVATE
);
String customUrl =
prefs.getString(
"sd_custom",
"https://google.com"
);
openUrlLogic(customUrl);
}
}
}
};
sd1.setOnClickListener(sdListener);
sd2.setOnClickListener(sdListener);
sd3.setOnClickListener(sdListener);
loadSavedPreferences();
updateInterfaceText();
}
@Override
public void onBackPressed() {
if (webView.getVisibility() == View.VISIBLE) {
if (webView.canGoBack()) {
webView.goBack();
} else {
webView.setVisibility(View.GONE);
speedDialLayout.setVisibility(View.VISIBLE);
urlInput.setText("");
}
} else {
super.onBackPressed();
}
}
private void openUrlLogic(String input) {
speedDialLayout.setVisibility(View.GONE);
webView.setVisibility(View.VISIBLE);
if (input.contains(".") && !input.contains(" ")) {
if (!input.startsWith("http://")
&& !input.startsWith("https://")) {
input = "https://" + input;
}
webView.loadUrl(input);
urlInput.setText(input);
} else {
String searchUrl = "";
if (currentEngine.equals("Google")) {
searchUrl =
"https://google.com/search?q=" + input;
} else if (currentEngine.equals("Yandex")) {
searchUrl =
"https://yandex.ru" + input;
} else if (currentEngine.equals("DuckDuckGo")) {
searchUrl =
"https://duckduckgo.com" + input;
} else if (currentEngine.equals("Yahoo")) {
searchUrl =
"https://yahoo.com" + input;
}
webView.loadUrl(searchUrl);
urlInput.setText(input);
}
}
private void showSettingsDialog() {
AlertDialog.Builder builder =
new AlertDialog.Builder(this);
builder.setTitle(
currentLanguage.equals("ru")
? "Опции"
: "Options"
);
String[] options = {
(currentLanguage.equals("ru")
? "Язык: "
: "Language: ")
+ currentLanguage.toUpperCase(),
(currentLanguage.equals("ru")
? "Поисковик: "
: "Search Engine: ")
+ currentEngine
};
builder.setItems(
options,
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which
) {
SharedPreferences prefs =
getSharedPreferences(
"RetroPrefs",
MODE_PRIVATE
);
if (which == 0) {
currentLanguage =
currentLanguage.equals("ru")
? "en"
: "ru";
prefs.edit()
.putString(
"lang",
currentLanguage
)
.apply();
} else if (which == 1) {
if (currentEngine.equals("Google")) {
currentEngine = "Yandex";
} else if (currentEngine.equals("Yandex")) {
currentEngine = "DuckDuckGo";
} else if (currentEngine.equals("DuckDuckGo")) {
currentEngine = "Yahoo";
} else {
currentEngine = "Google";
}
prefs.edit()
.putString(
"engine",
currentEngine
)
.apply();
}
updateInterfaceText();
}
}
);
builder.show();
}
private void showAddSpeedDialDialog() {
AlertDialog.Builder builder =
new AlertDialog.Builder(this);
builder.setTitle(
currentLanguage.equals("ru")
? "Добавить панель"
: "Add Speed Dial"
);
final EditText inputField =
new EditText(this);
inputField.setHint("https://example.com");
builder.setView(inputField);
builder.setPositiveButton(
"OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which
) {
String url =
inputField.getText()
.toString()
.trim();
if (!url.isEmpty()) {
SharedPreferences prefs =
getSharedPreferences(
"RetroPrefs",
MODE_PRIVATE
);
prefs.edit()
.putString(
"sd_custom",
url
)
.apply();
sd3.setText("Custom");
}
}
}
);
builder.show();
}
private void loadSavedPreferences() {
SharedPreferences prefs =
getSharedPreferences(
"RetroPrefs",
MODE_PRIVATE
);
currentLanguage =
prefs.getString(
"lang",
"ru"
);
currentEngine =
prefs.getString(
"engine",
"Google"
);
if (prefs.contains("sd_custom")) {
sd3.setText("Custom");
}
}
private void updateInterfaceText() {
if (currentLanguage.equals("ru")) {
btnHome.setText("Домой");
btnOptions.setText("Опции");
urlInput.setHint("Поиск или адрес");
speedDialTitle.setText("Экспресс-панель");
} else {
btnHome.setText("Home");
btnOptions.setText("Options");
urlInput.setHint("Search or URL");
speedDialTitle.setText("Speed Dial");
}
}
}