Example usage for android.webkit WebView setSystemUiVisibility

List of usage examples for android.webkit WebView setSystemUiVisibility

Introduction

In this page you can find the example usage for android.webkit WebView setSystemUiVisibility.

Prototype

public void setSystemUiVisibility(int visibility) 

Source Link

Document

Request that the visibility of the status bar or other screen/window decorations be changed.

Usage

From source file:com.stoutner.privacybrowser.MainWebViewActivity.java

@Override
// Remove Android Studio's warning about the dangers of using SetJavaScriptEnabled.  The whole premise of Privacy Browser is built around an understanding of these dangers.
@SuppressLint("SetJavaScriptEnabled")
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_coordinatorlayout);

    // We need to use the SupportActionBar from android.support.v7.app.ActionBar until the minimum API is >= 21.
    Toolbar supportAppBar = (Toolbar) findViewById(R.id.appBar);
    setSupportActionBar(supportAppBar);//from w  ww .jav  a  2  s. co  m
    final ActionBar appBar = getSupportActionBar();

    // This is needed to get rid of the Android Studio warning that appBar might be null.
    assert appBar != null;

    // Add the custom url_bar layout, which shows the favoriteIcon, urlTextBar, and progressBar.
    appBar.setCustomView(R.layout.url_bar);
    appBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);

    // Set the "go" button on the keyboard to load the URL in urlTextBox.
    urlTextBox = (EditText) appBar.getCustomView().findViewById(R.id.urlTextBox);
    urlTextBox.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // If the event is a key-down event on the "enter" button, load the URL.
            if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
                // Load the URL into the mainWebView and consume the event.
                try {
                    loadUrlFromTextBox();
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                // If the enter key was pressed, consume the event.
                return true;
            } else {
                // If any other key was pressed, do not consume the event.
                return false;
            }
        }
    });

    final FrameLayout fullScreenVideoFrameLayout = (FrameLayout) findViewById(R.id.fullScreenVideoFrameLayout);

    // Implement swipe to refresh
    swipeToRefresh = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
    assert swipeToRefresh != null; //This assert removes the incorrect warning on the following line that swipeToRefresh might be null.
    swipeToRefresh.setColorSchemeResources(R.color.blue);
    swipeToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            mainWebView.reload();
        }
    });

    mainWebView = (WebView) findViewById(R.id.mainWebView);

    // Create the navigation drawer.
    drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
    // The DrawerTitle identifies the drawer in accessibility mode.
    drawerLayout.setDrawerTitle(GravityCompat.START, getString(R.string.navigation_drawer));

    // Listen for touches on the navigation menu.
    final NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
    assert navigationView != null; // This assert removes the incorrect warning on the following line that navigationView might be null.
    navigationView.setNavigationItemSelectedListener(this);

    // drawerToggle creates the hamburger icon at the start of the AppBar.
    drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, supportAppBar, R.string.open_navigation,
            R.string.close_navigation);

    mainWebView.setWebViewClient(new WebViewClient() {
        // shouldOverrideUrlLoading makes this WebView the default handler for URLs inside the app, so that links are not kicked out to other apps.
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            mainWebView.loadUrl(url);
            return true;
        }

        // Update the URL in urlTextBox when the page starts to load.
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            urlTextBox.setText(url);
        }

        // Update formattedUrlString and urlTextBox.  It is necessary to do this after the page finishes loading because the final URL can change during load.
        @Override
        public void onPageFinished(WebView view, String url) {
            formattedUrlString = url;

            // Only update urlTextBox if the user is not typing in it.
            if (!urlTextBox.hasFocus()) {
                urlTextBox.setText(formattedUrlString);
            }
        }
    });

    mainWebView.setWebChromeClient(new WebChromeClient() {
        // Update the progress bar when a page is loading.
        @Override
        public void onProgressChanged(WebView view, int progress) {
            // Make sure that appBar is not null.
            if (appBar != null) {
                ProgressBar progressBar = (ProgressBar) appBar.getCustomView().findViewById(R.id.progressBar);
                progressBar.setProgress(progress);
                if (progress < 100) {
                    progressBar.setVisibility(View.VISIBLE);
                } else {
                    progressBar.setVisibility(View.GONE);

                    //Stop the SwipeToRefresh indicator if it is running
                    swipeToRefresh.setRefreshing(false);
                }
            }
        }

        // Set the favorite icon when it changes.
        @Override
        public void onReceivedIcon(WebView view, Bitmap icon) {
            // Save a copy of the favorite icon for use if a shortcut is added to the home screen.
            favoriteIcon = icon;

            // Place the favorite icon in the appBar if it is not null.
            if (appBar != null) {
                ImageView imageViewFavoriteIcon = (ImageView) appBar.getCustomView()
                        .findViewById(R.id.favoriteIcon);
                imageViewFavoriteIcon.setImageBitmap(Bitmap.createScaledBitmap(icon, 64, 64, true));
            }
        }

        // Enter full screen video
        @Override
        public void onShowCustomView(View view, CustomViewCallback callback) {
            if (appBar != null) {
                appBar.hide();
            }

            // Show the fullScreenVideoFrameLayout.
            assert fullScreenVideoFrameLayout != null; //This assert removes the incorrect warning on the following line that fullScreenVideoFrameLayout might be null.
            fullScreenVideoFrameLayout.addView(view);
            fullScreenVideoFrameLayout.setVisibility(View.VISIBLE);

            // Hide the mainWebView.
            mainWebView.setVisibility(View.GONE);

            // Hide the ad if this is the free flavor.
            BannerAd.hideAd(adView);

            /* SYSTEM_UI_FLAG_HIDE_NAVIGATION hides the navigation bars on the bottom or right of the screen.
             * SYSTEM_UI_FLAG_FULLSCREEN hides the status bar across the top of the screen.
             * SYSTEM_UI_FLAG_IMMERSIVE_STICKY makes the navigation and status bars ghosted overlays and automatically rehides them.
             */

            // Set the one flag supported by API >= 14.
            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

            // Set the two flags that are supported by API >= 16.
            if (Build.VERSION.SDK_INT >= 16) {
                view.setSystemUiVisibility(
                        View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN);
            }

            // Set all three flags that are supported by API >= 19.
            if (Build.VERSION.SDK_INT >= 19) {
                view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
            }
        }

        // Exit full screen video
        public void onHideCustomView() {
            if (appBar != null) {
                appBar.show();
            }

            // Show the mainWebView.
            mainWebView.setVisibility(View.VISIBLE);

            // Show the ad if this is the free flavor.
            BannerAd.showAd(adView);

            // Hide the fullScreenVideoFrameLayout.
            assert fullScreenVideoFrameLayout != null; //This assert removes the incorrect warning on the following line that fullScreenVideoFrameLayout might be null.
            fullScreenVideoFrameLayout.removeAllViews();
            fullScreenVideoFrameLayout.setVisibility(View.GONE);
        }
    });

    // Allow the downloading of files.
    mainWebView.setDownloadListener(new DownloadListener() {
        // Launch the Android download manager when a link leads to a download.
        @Override
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
                long contentLength) {
            DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            DownloadManager.Request requestUri = new DownloadManager.Request(Uri.parse(url));

            // Add the URL as the description for the download.
            requestUri.setDescription(url);

            // Show the download notification after the download is completed.
            requestUri.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

            // Initiate the download and display a Snackbar.
            downloadManager.enqueue(requestUri);
            Snackbar.make(findViewById(R.id.mainWebView), R.string.download_started, Snackbar.LENGTH_SHORT)
                    .show();
        }
    });

    // Allow pinch to zoom.
    mainWebView.getSettings().setBuiltInZoomControls(true);

    // Hide zoom controls.
    mainWebView.getSettings().setDisplayZoomControls(false);

    // Initialize the default preference values the first time the program is run.
    PreferenceManager.setDefaultValues(this, R.xml.preferences, false);

    // Get the shared preference values.
    SharedPreferences savedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

    // Set JavaScript initial status.  The default value is false.
    javaScriptEnabled = savedPreferences.getBoolean("javascript_enabled", false);
    mainWebView.getSettings().setJavaScriptEnabled(javaScriptEnabled);

    // Initialize cookieManager.
    cookieManager = CookieManager.getInstance();

    // Set cookies initial status.  The default value is false.
    firstPartyCookiesEnabled = savedPreferences.getBoolean("first_party_cookies_enabled", false);
    cookieManager.setAcceptCookie(firstPartyCookiesEnabled);

    // Set third-party cookies initial status if API >= 21.  The default value is false.
    if (Build.VERSION.SDK_INT >= 21) {
        thirdPartyCookiesEnabled = savedPreferences.getBoolean("third_party_cookies_enabled", false);
        cookieManager.setAcceptThirdPartyCookies(mainWebView, thirdPartyCookiesEnabled);
    }

    // Set DOM storage initial status.  The default value is false.
    domStorageEnabled = savedPreferences.getBoolean("dom_storage_enabled", false);
    mainWebView.getSettings().setDomStorageEnabled(domStorageEnabled);

    // Set the user agent initial status.
    String userAgentString = savedPreferences.getString("user_agent", "Default user agent");
    switch (userAgentString) {
    case "Default user agent":
        // Do nothing.
        break;

    case "Custom user agent":
        // Set the custom user agent on mainWebView,  The default is "PrivacyBrowser/1.0".
        mainWebView.getSettings()
                .setUserAgentString(savedPreferences.getString("custom_user_agent", "PrivacyBrowser/1.0"));
        break;

    default:
        // Set the selected user agent on mainWebView.  The default is "PrivacyBrowser/1.0".
        mainWebView.getSettings()
                .setUserAgentString(savedPreferences.getString("user_agent", "PrivacyBrowser/1.0"));
        break;
    }

    // Set the initial string for JavaScript disabled search.
    if (savedPreferences.getString("javascript_disabled_search", "https://duckduckgo.com/html/?q=")
            .equals("Custom URL")) {
        // Get the custom URL string.  The default is "".
        javaScriptDisabledSearchURL = savedPreferences.getString("javascript_disabled_search_custom_url", "");
    } else {
        // Use the string from javascript_disabled_search.
        javaScriptDisabledSearchURL = savedPreferences.getString("javascript_disabled_search",
                "https://duckduckgo.com/html/?q=");
    }

    // Set the initial string for JavaScript enabled search.
    if (savedPreferences.getString("javascript_enabled_search", "https://duckduckgo.com/?q=")
            .equals("Custom URL")) {
        // Get the custom URL string.  The default is "".
        javaScriptEnabledSearchURL = savedPreferences.getString("javascript_enabled_search_custom_url", "");
    } else {
        // Use the string from javascript_enabled_search.
        javaScriptEnabledSearchURL = savedPreferences.getString("javascript_enabled_search",
                "https://duckduckgo.com/?q=");
    }

    // Set homepage initial status.  The default value is "https://www.duckduckgo.com".
    homepage = savedPreferences.getString("homepage", "https://www.duckduckgo.com");

    // Set swipe to refresh initial status.  The default is true.
    swipeToRefreshEnabled = savedPreferences.getBoolean("swipe_to_refresh_enabled", true);
    swipeToRefresh.setEnabled(swipeToRefreshEnabled);

    // Get the intent information that started the app.
    final Intent intent = getIntent();

    if (intent.getData() != null) {
        // Get the intent data and convert it to a string.
        final Uri intentUriData = intent.getData();
        formattedUrlString = intentUriData.toString();
    }

    // If formattedUrlString is null assign the homepage to it.
    if (formattedUrlString == null) {
        formattedUrlString = homepage;
    }

    // Load the initial website.
    mainWebView.loadUrl(formattedUrlString);

    // Initialize AdView for the free flavor and request an ad.  If this is not the free flavor BannerAd.requestAd() does nothing.
    adView = findViewById(R.id.adView);
    BannerAd.requestAd(adView);
}