From 73fbc810676cf3f51b6900eead20d5299a350340 Mon Sep 17 00:00:00 2001 From: arkon Date: Thu, 16 Jan 2020 21:43:10 -0500 Subject: [PATCH] Webview enhancements - Pull to refresh - Loading progress - Share page --- .../tachiyomi/ui/webview/WebViewActivity.kt | 53 ++++++++++++++++--- app/src/main/res/layout/webview_activity.xml | 33 +++++++++--- app/src/main/res/menu/webview.xml | 8 ++- 3 files changed, 79 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt index 9ea7cfb375..170fda36ed 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt @@ -7,19 +7,17 @@ import android.graphics.Color import android.os.Bundle import android.view.Menu import android.view.MenuItem +import android.webkit.WebChromeClient import android.webkit.WebView import androidx.core.graphics.ColorUtils import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.base.activity.BaseActivity -import eu.kanade.tachiyomi.util.WebViewClientCompat -import eu.kanade.tachiyomi.util.getResourceColor -import kotlinx.android.synthetic.main.webview_activity.toolbar -import kotlinx.android.synthetic.main.webview_activity.webview +import eu.kanade.tachiyomi.util.* +import kotlinx.android.synthetic.main.webview_activity.* import uy.kohesive.injekt.injectLazy - class WebViewActivity : BaseActivity() { private val sourceManager by injectLazy() @@ -41,11 +39,27 @@ class WebViewActivity : BaseActivity() { super.onBackPressed() } + swipe_refresh.isEnabled = false + swipe_refresh.setOnRefreshListener { + refreshPage() + } + if (bundle == null) { val source = sourceManager.get(intent.extras!!.getLong(SOURCE_KEY)) as? HttpSource ?: return val url = intent.extras!!.getString(URL_KEY) ?: return val headers = source.headers.toMultimap().mapValues { it.value.getOrNull(0) ?: "" } + webview.webChromeClient = object : WebChromeClient() { + override fun onProgressChanged(view: WebView?, newProgress: Int) { + progress_bar.visible() + progress_bar.progress = newProgress + if (newProgress == 100) { + progress_bar.invisible() + } + super.onProgressChanged(view, newProgress) + } + } + webview.webViewClient = object : WebViewClientCompat() { override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean { view.loadUrl(url) @@ -56,12 +70,21 @@ class WebViewActivity : BaseActivity() { super.onPageFinished(view, url) invalidateOptionsMenu() title = view?.title + swipe_refresh.isEnabled = true + swipe_refresh?.isRefreshing = false } override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { super.onPageStarted(view, url, favicon) invalidateOptionsMenu() } + + override fun onPageCommitVisible(view: WebView?, url: String?) { + super.onPageCommitVisible(view, url) + + // Reset to top when page refreshes + nested_view.scrollTo(0, 0) + } } webview.settings.javaScriptEnabled = true webview.settings.userAgentString = source.headers["User-Agent"] @@ -98,11 +121,29 @@ class WebViewActivity : BaseActivity() { when (item.itemId) { R.id.action_web_back -> webview.goBack() R.id.action_web_forward -> webview.goForward() - R.id.action_web_refresh -> webview.reload() + R.id.action_web_refresh -> refreshPage() + R.id.action_web_share -> shareWebpage() } return super.onOptionsItemSelected(item) } + private fun refreshPage() { + swipe_refresh.isRefreshing = true + webview.reload() + } + + private fun shareWebpage() { + try { + val intent = Intent(Intent.ACTION_SEND).apply { + type = "text/plain" + putExtra(Intent.EXTRA_TEXT, webview.url) + } + startActivity(Intent.createChooser(intent, getString(R.string.action_share))) + } catch (e: Exception) { + toast(e.message) + } + } + companion object { private const val SOURCE_KEY = "source_key" private const val URL_KEY = "url_key" diff --git a/app/src/main/res/layout/webview_activity.xml b/app/src/main/res/layout/webview_activity.xml index 972db4d692..7919b13f35 100644 --- a/app/src/main/res/layout/webview_activity.xml +++ b/app/src/main/res/layout/webview_activity.xml @@ -17,21 +17,40 @@ android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:theme="?attr/actionBarTheme" - app:navigationIcon="@drawable/ic_close_white_24dp" - app:layout_scrollFlags="scroll|enterAlways|snap" /> + app:layout_scrollFlags="scroll|enterAlways|snap" + app:navigationIcon="@drawable/ic_close_white_24dp" /> - - + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + + + + + + + + + diff --git a/app/src/main/res/menu/webview.xml b/app/src/main/res/menu/webview.xml index ca02d3dfe1..1a7daa2374 100644 --- a/app/src/main/res/menu/webview.xml +++ b/app/src/main/res/menu/webview.xml @@ -16,8 +16,12 @@ + app:showAsAction="never" /> + +