Загрузка данных


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");
        }
    }
}