From 489e982fdd81a8fc7de85510061a730d73b794d7 Mon Sep 17 00:00:00 2001 From: Fedir Tsapana Date: Tue, 11 Aug 2020 22:23:50 +0300 Subject: [PATCH] fixed critical problem with addressbar focus; added zoom controls to bottom bar; --- .idea/misc.xml | 9 ---- .idea/modules.xml | 9 ---- .../activity/main/MainActivity.kt | 53 +++++++++++++------ .../phlox/tvwebbrowser/utils/Extensions.kt | 13 ++++- .../res/drawable/ic_zoom_in_black_24dp.xml | 12 +++++ .../res/drawable/ic_zoom_in_gray_24dp.xml | 12 +++++ .../res/drawable/ic_zoom_out_black_24dp.xml | 9 ++++ .../res/drawable/ic_zoom_out_gray_24dp.xml | 9 ++++ .../res/drawable/zoomin_icon_selector.xml | 5 ++ .../res/drawable/zoomout_icon_selector.xml | 5 ++ app/src/main/res/layout/activity_main.xml | 22 ++++++++ app/src/main/res/values/strings.xml | 2 + 12 files changed, 124 insertions(+), 36 deletions(-) delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml create mode 100644 app/src/main/res/drawable/ic_zoom_in_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_zoom_in_gray_24dp.xml create mode 100644 app/src/main/res/drawable/ic_zoom_out_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_zoom_out_gray_24dp.xml create mode 100644 app/src/main/res/drawable/zoomin_icon_selector.xml create mode 100644 app/src/main/res/drawable/zoomout_icon_selector.xml diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 37a7509..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index f954d4e..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/phlox/tvwebbrowser/activity/main/MainActivity.kt b/app/src/main/java/com/phlox/tvwebbrowser/activity/main/MainActivity.kt index 49bdc17..4332a79 100644 --- a/app/src/main/java/com/phlox/tvwebbrowser/activity/main/MainActivity.kt +++ b/app/src/main/java/com/phlox/tvwebbrowser/activity/main/MainActivity.kt @@ -134,21 +134,33 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() { ibFavorites.setOnClickListener { showFavorites() } ibHistory.setOnClickListener { showHistory() } ibSettings.setOnClickListener { showSettings() } + ibZoomIn.setOnClickListener { + viewModel.currentTab.value?.webView?.apply { + if (this.canZoomIn()) this.zoomIn() + onWebViewUpdated(viewModel.currentTab.value!!) + if (!this.canZoomIn()) { + ibZoomOut.requestFocus() + } + } + } + ibZoomOut.setOnClickListener { + viewModel.currentTab.value?.webView?.apply { + if (this.canZoomOut()) this.zoomOut() + onWebViewUpdated(viewModel.currentTab.value!!) + if (!this.canZoomOut()) { + ibZoomIn.requestFocus() + } + } + } etUrl.onFocusChangeListener = etUrlFocusChangeListener etUrl.setOnKeyListener(etUrlKeyListener) - ibForward.onFocusChangeListener = bottomButtonsFocusListener - ibBack.onFocusChangeListener = bottomButtonsFocusListener - ibRefresh.onFocusChangeListener = bottomButtonsFocusListener - ibHome.onFocusChangeListener = bottomButtonsFocusListener - ibCloseTab.onFocusChangeListener = bottomButtonsFocusListener - ibForward.setOnKeyListener(bottomButtonsKeyListener) - ibBack.setOnKeyListener(bottomButtonsKeyListener) - ibRefresh.setOnKeyListener(bottomButtonsKeyListener) - ibHome.setOnKeyListener(bottomButtonsKeyListener) - ibCloseTab.setOnKeyListener(bottomButtonsKeyListener) + llBottomPanel.childs.forEach { + it.onFocusChangeListener = bottomButtonsFocusListener + it.setOnKeyListener(bottomButtonsKeyListener) + } settingsViewModel.uaString.observe(this, Observer { uas -> for (tab in viewModel.tabsStates) { @@ -303,8 +315,8 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() { if (keyEvent.action == KeyEvent.ACTION_UP) { val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(etUrl.windowToken, 0) - hideFloatAddressBar() search(etUrl.text.toString()) + hideFloatAddressBar() viewModel.currentTab.value!!.webView?.requestFocus() } return@OnKeyListener true @@ -517,8 +529,7 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() { wv.setNetworkAvailable(Utils.isNetworkConnected(this)) etUrl.setText(newTab.currentOriginalUrl) - ibBack.isEnabled = wv.canGoBack() == true - ibForward.isEnabled = wv.canGoForward() == true + onWebViewUpdated(newTab) } @SuppressLint("SetJavaScriptEnabled") @@ -809,8 +820,7 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() { override fun onPageStarted(view: WebView, url: String?, favicon: Bitmap?) { super.onPageStarted(view, url, favicon) Log.d(TAG, "onPageStarted url: $url") - ibBack.isEnabled = tab.webView?.canGoBack() == true - ibForward.isEnabled = tab.webView?.canGoForward() == true + onWebViewUpdated(tab) if (tab.webView?.url != null) { tab.currentOriginalUrl = tab.webView?.url } else if (url != null) { @@ -827,8 +837,7 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() { if (tab.webView == null || viewModel.currentTab.value == null || view == null) { return } - ibBack!!.isEnabled = tab.webView?.canGoBack() == true - ibForward!!.isEnabled = tab.webView?.canGoForward() == true + onWebViewUpdated(tab) if (tab.webView?.url != null) { tab.currentOriginalUrl = tab.webView?.url @@ -892,6 +901,16 @@ class MainActivity : AppCompatActivity(), CoroutineScope by MainScope() { return webView } + private fun onWebViewUpdated(tab: WebTabState) { + ibBack.isEnabled = tab.webView?.canGoBack() == true + ibForward.isEnabled = tab.webView?.canGoForward() == true + val zoomPossible = tab.webView?.canZoomIn() == true || tab.webView?.canZoomOut() == true + ibZoomIn.visibility = if (zoomPossible) View.VISIBLE else View.GONE + ibZoomOut.visibility = if (zoomPossible) View.VISIBLE else View.GONE + ibZoomIn.isEnabled = tab.webView?.canZoomIn() == true + ibZoomOut.isEnabled = tab.webView?.canZoomOut() == true + } + private fun showCertificateErrorPage(error: SslError) { val tab = viewModel.currentTab.value ?: return val webView = tab.webView ?: return diff --git a/app/src/main/java/com/phlox/tvwebbrowser/utils/Extensions.kt b/app/src/main/java/com/phlox/tvwebbrowser/utils/Extensions.kt index a68c181..0a166a4 100644 --- a/app/src/main/java/com/phlox/tvwebbrowser/utils/Extensions.kt +++ b/app/src/main/java/com/phlox/tvwebbrowser/utils/Extensions.kt @@ -3,7 +3,9 @@ package com.phlox.tvwebbrowser.utils import android.app.Activity import android.content.ContextWrapper import android.view.View +import android.view.ViewGroup import java.util.* +import kotlin.collections.ArrayList val View.activity: Activity? get() { @@ -23,4 +25,13 @@ fun Calendar.sameDay(other: Calendar): Boolean { return this.get(Calendar.YEAR) == other.get(Calendar.YEAR) && this.get(Calendar.MONTH) == other.get(Calendar.MONTH) && this.get(Calendar.DAY_OF_MONTH) == other.get(Calendar.DAY_OF_MONTH) -} \ No newline at end of file +} + +val ViewGroup.childs: ArrayList + get() { + val result = ArrayList() + for (i in 0 until this.childCount) { + result.add(this.getChildAt(i)) + } + return result + } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_zoom_in_black_24dp.xml b/app/src/main/res/drawable/ic_zoom_in_black_24dp.xml new file mode 100644 index 0000000..f8eb302 --- /dev/null +++ b/app/src/main/res/drawable/ic_zoom_in_black_24dp.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_zoom_in_gray_24dp.xml b/app/src/main/res/drawable/ic_zoom_in_gray_24dp.xml new file mode 100644 index 0000000..74c5920 --- /dev/null +++ b/app/src/main/res/drawable/ic_zoom_in_gray_24dp.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_zoom_out_black_24dp.xml b/app/src/main/res/drawable/ic_zoom_out_black_24dp.xml new file mode 100644 index 0000000..1419635 --- /dev/null +++ b/app/src/main/res/drawable/ic_zoom_out_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_zoom_out_gray_24dp.xml b/app/src/main/res/drawable/ic_zoom_out_gray_24dp.xml new file mode 100644 index 0000000..1f6abea --- /dev/null +++ b/app/src/main/res/drawable/ic_zoom_out_gray_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/zoomin_icon_selector.xml b/app/src/main/res/drawable/zoomin_icon_selector.xml new file mode 100644 index 0000000..6950070 --- /dev/null +++ b/app/src/main/res/drawable/zoomin_icon_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/zoomout_icon_selector.xml b/app/src/main/res/drawable/zoomout_icon_selector.xml new file mode 100644 index 0000000..5bc3e1e --- /dev/null +++ b/app/src/main/res/drawable/zoomout_icon_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 19cec64..fa58b8b 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -221,6 +221,28 @@ android:layout_marginEnd="3dp" android:contentDescription="@string/refresh_page" /> + + + + Navigate home Refresh page Voice search + Zoom in + Zoom out Not set Action: Current key: