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


package com.example.myapplication;

import android.app.DownloadManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.Intent.ShortcutIconResource;
import android.net.Uri;
import android.net.http.SslError;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.activity.OnBackPressedCallback;

public class MainActivity extends AppCompatActivity {

    private EditText urlInput;
    private WebView webView;
    private Spinner searchEngineSpinner;
    private boolean isDarkWebsiteMode = false;
    private final String[] searchEngines = {"Google", "Yandex", "DuckDuckGo", "Yahoo"};

    @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);
        searchEngineSpinner = findViewById(R.id.search_engine_spinner);
        Button goButton = findViewById(R.id.go_button);
        Button btnBack = findViewById(R.id.btn_back);
        Button btnForward = findViewById(R.id.btn_forward);
        Button btnTheme = findViewById(R.id.btn_theme);
        Button btnBookmark = findViewById(R.id.btn_bookmark);
        Button btnShortcut = findViewById(R.id.btn_shortcut);

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, searchEngines);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        searchEngineSpinner.setAdapter(adapter);

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

        webView.setDownloadListener(new DownloadListener() {
            @Override
            public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "browser_file_" + System.currentTimeMillis());
                DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                if (manager != null) {
                    manager.enqueue(request);
                    Toast.makeText(MainActivity.this, "Download started...", Toast.LENGTH_SHORT).show();
                }
            }
        });

        goButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String input = urlInput.getText().toString().trim();
                if (!input.isEmpty()) {
                    loadWebPage(input);
                }
            }
        });

        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (webView.canGoBack()) webView.goBack();
            }
        });

        btnForward.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (webView.canGoForward()) webView.goForward();
            }
        });

        btnTheme.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isDarkWebsiteMode = !isDarkWebsiteMode;
                if (isDarkWebsiteMode) {
                    webView.loadUrl("javascript:document.body.style.filter='invert(1) hue-rotate(180deg)';" +
                            "var media = document.querySelectorAll('img, video');" +
                            "media.forEach(element => element.style.filter = 'invert(1) hue-rotate(180deg)');");
                    Toast.makeText(MainActivity.this, "Dark Mode On", Toast.LENGTH_SHORT).show();
                } else {
                    webView.loadUrl("javascript:document.body.style.filter='none';" +
                            "var media = document.querySelectorAll('img, video');" +
                            "media.forEach(element => element.style.filter = 'none');");
                    Toast.makeText(MainActivity.this, "Dark Mode Off", Toast.LENGTH_SHORT).show();
                }
            }
        });

        btnBookmark.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String currentUrl = webView.getUrl();
                if (currentUrl != null) {
                    SharedPreferences prefs = getSharedPreferences("Bookmarks", MODE_PRIVATE);
                    prefs.edit().putString("last_bookmark", currentUrl).apply();
                    Toast.makeText(MainActivity.this, "Saved to Bookmarks!", Toast.LENGTH_SHORT).show();
                }
            }
        });

        btnShortcut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String currentUrl = webView.getUrl();
                String currentTitle = webView.getTitle();
                if (currentUrl != null) {
                    Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class);
                    shortcutIntent.setAction(Intent.ACTION_MAIN);

                    Intent addIntent = new Intent();
                    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
                    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, currentTitle != null ? currentTitle : "Web Site");
                    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, ShortcutIconResource.fromContext(getApplicationContext(), R.mipmap.ic_launcher));
                    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
                    getApplicationContext().sendBroadcast(addIntent);
                    Toast.makeText(MainActivity.this, "Shortcut created on Home screen!", Toast.LENGTH_SHORT).show();
                }
            }
        });

        getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
                if (webView != null && webView.canGoBack()) {
                    webView.goBack();
                } else {
                    finish();
                }
            }
        });
    }

    private void loadWebPage(String input) {
        if (input.contains(".") && !input.contains(" ")) {
            if (!input.startsWith("http://") && !input.startsWith("https://")) {
                input = "https://" + input;
            }
            webView.loadUrl(input);
        } else {
            String selectedEngine = searchEngineSpinner.getSelectedItem().toString();
            String searchUrl = "";
            if (selectedEngine.equals("Google")) {
                searchUrl = "https://google.com" + input;
            } else if (selectedEngine.equals("Yandex")) {
                searchUrl = "https://yandex.ru" + input;
            } else if (selectedEngine.equals("DuckDuckGo")) {
                searchUrl = "https://duckduckgo.com" + input;
            } else if (selectedEngine.equals("Yahoo")) {
                searchUrl = "https://yahoo.com" + input;
            }
            webView.loadUrl(searchUrl);
        }
    }
}