123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- /*
- * Nextcloud Android client application
- *
- * @author Tobias Kaminsky
- * Copyright (C) 2017 Tobias Kaminsky
- * Copyright (C) 2017 Nextcloud GmbH.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
- package com.owncloud.android.ui.activity;
- import android.annotation.SuppressLint;
- import android.content.pm.ApplicationInfo;
- import android.os.Bundle;
- import android.text.TextUtils;
- import android.view.MenuItem;
- import android.view.View;
- import android.view.Window;
- import android.webkit.WebChromeClient;
- import android.webkit.WebSettings;
- import android.webkit.WebView;
- import android.webkit.WebViewClient;
- import android.widget.ProgressBar;
- import com.owncloud.android.MainApp;
- import com.owncloud.android.R;
- import com.owncloud.android.lib.common.utils.Log_OC;
- import com.owncloud.android.utils.DisplayUtils;
- import com.owncloud.android.utils.ThemeUtils;
- import java.io.InputStream;
- import androidx.appcompat.app.ActionBar;
- import androidx.drawerlayout.widget.DrawerLayout;
- /**
- * This activity shows an URL as a web view
- */
- public class ExternalSiteWebView extends FileActivity {
- public static final String EXTRA_TITLE = "TITLE";
- public static final String EXTRA_URL = "URL";
- public static final String EXTRA_SHOW_SIDEBAR = "SHOW_SIDEBAR";
- public static final String EXTRA_SHOW_TOOLBAR = "SHOW_TOOLBAR";
- public static final String EXTRA_MENU_ITEM_ID = "MENU_ITEM_ID";
- public static final String EXTRA_TEMPLATE = "TEMPLATE";
- private static final String TAG = ExternalSiteWebView.class.getSimpleName();
- protected boolean showToolbar = true;
- protected int webViewLayout = R.layout.externalsite_webview;
- private int menuItemId;
- protected WebView webview;
- private boolean showSidebar;
- String url;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- Log_OC.v(TAG, "onCreate() start");
- Bundle extras = getIntent().getExtras();
- String title = extras.getString(EXTRA_TITLE);
- url = extras.getString(EXTRA_URL);
- if (extras.containsKey(EXTRA_SHOW_TOOLBAR)) {
- showToolbar = extras.getBoolean(EXTRA_SHOW_TOOLBAR);
- }
- menuItemId = extras.getInt(EXTRA_MENU_ITEM_ID);
- showSidebar = extras.getBoolean(EXTRA_SHOW_SIDEBAR);
- // show progress
- Window window = getWindow();
- if (window != null) {
- window.requestFeature(Window.FEATURE_PROGRESS);
- }
- super.onCreate(savedInstanceState);
- setContentView(webViewLayout);
- webview = findViewById(R.id.webView);
- final WebSettings webSettings = webview.getSettings();
- webview.setFocusable(true);
- webview.setFocusableInTouchMode(true);
- webview.setClickable(true);
- // allow debugging (when building the debug version); see details in
- // https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews
- if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0 ||
- getResources().getBoolean(R.bool.is_beta)) {
- Log_OC.d(this, "Enable debug for webView");
- WebView.setWebContentsDebuggingEnabled(true);
- }
- // setup toolbar
- if (showToolbar) {
- setupToolbar();
- } else {
- if (findViewById(R.id.appbar) != null) {
- findViewById(R.id.appbar).setVisibility(View.GONE);
- }
- }
- // setup drawer
- setupDrawer(menuItemId);
- if (!showSidebar) {
- setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
- }
- if (!TextUtils.isEmpty(title)) {
- setupActionBar(title);
- }
- setupWebSettings(webSettings);
- final ProgressBar progressBar = findViewById(R.id.progressBar);
- if (progressBar != null) {
- webview.setWebChromeClient(new WebChromeClient() {
- public void onProgressChanged(WebView view, int progress) {
- progressBar.setProgress(progress * 1000);
- }
- });
- }
- webview.setWebViewClient(new WebViewClient() {
- public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
- InputStream resources = getResources().openRawResource(R.raw.custom_error);
- String customError = DisplayUtils.getData(resources);
- if (!customError.isEmpty()) {
- webview.loadData(customError, "text/html; charset=UTF-8", null);
- }
- }
- });
- webview.loadUrl(url);
- }
- @SuppressLint("SetJavaScriptEnabled")
- private void setupWebSettings(WebSettings webSettings) {
- // enable zoom
- webSettings.setSupportZoom(true);
- webSettings.setBuiltInZoomControls(true);
- webSettings.setDisplayZoomControls(false);
- // Non-responsive webs are zoomed out when loaded
- webSettings.setUseWideViewPort(true);
- webSettings.setLoadWithOverviewMode(true);
- // user agent
- webSettings.setUserAgentString(MainApp.getUserAgent());
- // no private data storing
- webSettings.setSavePassword(false);
- webSettings.setSaveFormData(false);
- // disable local file access
- webSettings.setAllowFileAccess(false);
- // enable javascript
- webSettings.setJavaScriptEnabled(true);
- webSettings.setDomStorageEnabled(true);
- // caching disabled in debug mode
- if ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) == 0) {
- webSettings.setAppCacheEnabled(true);
- webSettings.setAppCachePath(getCacheDir().getPath());
- }
- }
- private void setupActionBar(String title) {
- ActionBar actionBar = getSupportActionBar();
- if (actionBar != null) {
- ThemeUtils.setColoredTitle(actionBar, title, this);
- if (showSidebar) {
- actionBar.setDisplayHomeAsUpEnabled(true);
- } else {
- setDrawerIndicatorEnabled(false);
- }
- }
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- boolean retval;
- switch (item.getItemId()) {
- case android.R.id.home:
- if (showSidebar) {
- if (isDrawerOpen()) {
- closeDrawer();
- } else {
- openDrawer();
- }
- } else {
- finish();
- }
- retval = true;
- break;
- default:
- retval = super.onOptionsItemSelected(item);
- break;
- }
- return retval;
- }
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- super.onPostCreate(savedInstanceState);
- setDrawerMenuItemChecked(menuItemId);
- }
- public WebView getWebview() {
- return this.webview;
- }
- }
|