diff --git a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/BrowserFragment.kt b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/BrowserFragment.kt index bc2b42d88..3e1dc4eb4 100644 --- a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/BrowserFragment.kt +++ b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/BrowserFragment.kt @@ -79,6 +79,8 @@ class BrowserFragment : Fragment(R.layout.fragment_browser) { if (actionId == EditorInfo.IME_ACTION_DONE) { hideKeyboard() onCommit(binding.toolbarEditText.text.toString()) + binding.toolbarEditText.clearFocus() + selectedTab().webview.requestFocus() true } else { false @@ -163,6 +165,18 @@ class BrowserFragment : Fragment(R.layout.fragment_browser) { } fullscreenView = null } + + override fun onUriChanged(view: WPEView, uri: String) { + super.onUriChanged(view, uri) + binding.toolbarEditText.setText(uri) + } + } + } + + selectedTab.webview.wpeViewClient = object : WPEViewClient() { + override fun onPageStarted(view: WPEView, url: String) { + super.onPageStarted(view, url) + binding.toolbarEditText.setText(url) } } } @@ -204,7 +218,7 @@ class BrowserFragment : Fragment(R.layout.fragment_browser) { private fun onCommit(text: String) { val url: String = if ((text.contains(".") || text.contains(":")) && !text.contains(" ")) { - Utils.normalizeAddress(text) + normalizeAddress(text) } else { SEARCH_URI_BASE + text } @@ -217,7 +231,7 @@ class BrowserFragment : Fragment(R.layout.fragment_browser) { manager.hideSoftInputFromWindow(requireView().windowToken, 0) } - private fun selectedTab() : Tab { + internal fun selectedTab() : Tab { // For now assume we always have at least one tab val selectedTabId = browserViewModel.browserState.value.selectedTabId return browserViewModel.findTab(selectedTabId!!) diff --git a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/MainActivity.kt b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/MainActivity.kt index d8298b49e..0edab2ab7 100644 --- a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/MainActivity.kt +++ b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/MainActivity.kt @@ -53,4 +53,17 @@ class MainActivity : AppCompatActivity(R.layout.activity_main) { super.onConfigurationChanged(newConfig) Log.d(TAG, "onConfigurationChanged") } + + @Deprecated("Deprecated in superclass") + override fun onBackPressed() { + val currentFragment = navHost.childFragmentManager.fragments.firstOrNull() + if (currentFragment is BrowserFragment) { + val webView = currentFragment.selectedTab().webview + if (webView.canGoBack()) { + webView.goBack() + return + } + } + super.onBackPressed() + } } diff --git a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/Utils.kt b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/Utils.kt index 60ccb0535..637a0ec8d 100644 --- a/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/Utils.kt +++ b/tools/minibrowser/src/main/java/org/wpewebkit/tools/minibrowser/Utils.kt @@ -34,19 +34,14 @@ fun View.requestApplyStandardInsets() { requestApplyInsetsWhenAttached() } -object Utils { - private fun addressHasWebScheme(address: String) : Boolean { +// If a string may be parsed as an URI that has an scheme, use it as-is. +// Otherwise fall-back to adding http://. +fun normalizeAddress(address: String): String { + val hasScheme = try { val uri = URI(address) - return uri.scheme?.let { - it == "http" - } ?: false - } - - fun normalizeAddress(address: String) : String { - return if (!addressHasWebScheme(address)) { - return "http://$address" - } else { - address - } + uri.scheme != null + } catch (_: Exception) { + false } + return if (hasScheme) address else "http://$address" } diff --git a/tools/minibrowser/src/main/res/drawable/address_view_background.xml b/tools/minibrowser/src/main/res/drawable/address_view_background.xml index 8f878dad5..4efab6270 100644 --- a/tools/minibrowser/src/main/res/drawable/address_view_background.xml +++ b/tools/minibrowser/src/main/res/drawable/address_view_background.xml @@ -1,5 +1,5 @@ - - + + diff --git a/tools/minibrowser/src/main/res/drawable/ic_baseline_more_vert_24.xml b/tools/minibrowser/src/main/res/drawable/ic_baseline_more_vert_24.xml index 39fbab5f7..b93355a59 100644 --- a/tools/minibrowser/src/main/res/drawable/ic_baseline_more_vert_24.xml +++ b/tools/minibrowser/src/main/res/drawable/ic_baseline_more_vert_24.xml @@ -1,4 +1,4 @@ - diff --git a/tools/minibrowser/src/main/res/drawable/ic_outline_settings_24.xml b/tools/minibrowser/src/main/res/drawable/ic_outline_settings_24.xml index c624d1973..0bd63eb72 100644 --- a/tools/minibrowser/src/main/res/drawable/ic_outline_settings_24.xml +++ b/tools/minibrowser/src/main/res/drawable/ic_outline_settings_24.xml @@ -1,4 +1,4 @@ - diff --git a/tools/minibrowser/src/main/res/drawable/ic_round_arrow_back_24.xml b/tools/minibrowser/src/main/res/drawable/ic_round_arrow_back_24.xml index 509d0e8a1..cec5fa096 100644 --- a/tools/minibrowser/src/main/res/drawable/ic_round_arrow_back_24.xml +++ b/tools/minibrowser/src/main/res/drawable/ic_round_arrow_back_24.xml @@ -1,5 +1,5 @@ diff --git a/tools/minibrowser/src/main/res/drawable/ic_round_arrow_forward_24.xml b/tools/minibrowser/src/main/res/drawable/ic_round_arrow_forward_24.xml index bdd7da8c2..c5bec9a07 100644 --- a/tools/minibrowser/src/main/res/drawable/ic_round_arrow_forward_24.xml +++ b/tools/minibrowser/src/main/res/drawable/ic_round_arrow_forward_24.xml @@ -1,5 +1,5 @@ diff --git a/tools/minibrowser/src/main/res/drawable/ic_round_refresh_24.xml b/tools/minibrowser/src/main/res/drawable/ic_round_refresh_24.xml index f4359556f..af083ca36 100644 --- a/tools/minibrowser/src/main/res/drawable/ic_round_refresh_24.xml +++ b/tools/minibrowser/src/main/res/drawable/ic_round_refresh_24.xml @@ -1,4 +1,4 @@ - diff --git a/tools/minibrowser/src/main/res/layout/fragment_browser.xml b/tools/minibrowser/src/main/res/layout/fragment_browser.xml index d0d2151de..00473d51c 100644 --- a/tools/minibrowser/src/main/res/layout/fragment_browser.xml +++ b/tools/minibrowser/src/main/res/layout/fragment_browser.xml @@ -12,13 +12,13 @@ android:id="@+id/tab_container_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_above="@id/page_progress" /> + android:layout_above="@id/toolbar" /> @@ -27,29 +27,30 @@ android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?android:actionBarSize" - android:layout_alignParentBottom="true" - android:background="?android:statusBarColor"> + android:layout_alignParentBottom="true"> + android:focusable="true"> + diff --git a/wpeview/src/main/java/org/wpewebkit/wpe/WKWebView.java b/wpeview/src/main/java/org/wpewebkit/wpe/WKWebView.java index 14ff6830b..ec6fa0a68 100644 --- a/wpeview/src/main/java/org/wpewebkit/wpe/WKWebView.java +++ b/wpeview/src/main/java/org/wpewebkit/wpe/WKWebView.java @@ -483,6 +483,8 @@ private void onEstimatedLoadProgress(double progress) { @Keep private void onUriChanged(@NonNull String uri) { this.uri = uri; + if (wpeChromeClient != null) + wpeChromeClient.onUriChanged(wpeView, uri); } @Keep diff --git a/wpeview/src/main/java/org/wpewebkit/wpeview/WPEChromeClient.java b/wpeview/src/main/java/org/wpewebkit/wpeview/WPEChromeClient.java index 31fcbf5b4..c696e04dd 100644 --- a/wpeview/src/main/java/org/wpewebkit/wpeview/WPEChromeClient.java +++ b/wpeview/src/main/java/org/wpewebkit/wpeview/WPEChromeClient.java @@ -53,6 +53,13 @@ default void onProgressChanged(@NonNull WPEView view, int progress) {} */ default void onReceivedTitle(@NonNull WPEView view, @NonNull String title) {} + /** + * Notify the host application that the URI has changed. + * @param view the WPEView that initiated the callback. + * @param uri the new URI. + */ + default void onUriChanged(@NonNull WPEView view, @NonNull String uri) {} + /** * A callback interface used by the host application to notify * the current page that its custom view has been dismissed.